PDA

View Full Version : مبتدی: چند مشکل در زمان اجرای برنامه



nhaftad
پنج شنبه 20 مرداد 1390, 01:51 صبح
من یه برنامه نوشتم که از یه کنترل چارت مال شرکت dev exprees استفاده کردم (اول با مال مایکروسافت کلی سر و کله زدم هرکار کردم اسکرول بارش کار نمیکرد و فعال نمیشد)برای رسم اطلاعات ورودی لحظه ای .
یعنی یه سه تا نمودار زنده مثل task manager ویندوز با این تفاوت که اسکرول بار هم داره که داده های قبل بشه دید.
که با یه گیرنده بیسیم از طریق پورت سریال اطلاعات سه تا میکرو کنترلر رو به صورت متناوب میگیره.
برای این برنامه از دوتا backgroundworker که یکی برای ارسال کد به میکرو ها که بگه نوبت کدومه داده بفرسته،
و یکی برای اسکرول کردن نمودار هر چند میلی ثانیه تا اطلاعات جدید و نشون بده(نمودار حرکت کنه).
و از 1 نخ استفاده کردم که که داده دریافتی از میکروهارو میگیره،کدشو شناسایی میکنه که از کدوم میکرو اومده تا نمودار مربوط به همون میکرو رسم شه(حرف اول دیتای ورودی) و چون داده های میکروها به صورت string میاد string قسمت دیتاشو به integer تبدیل میکنه.
چنتا مشکل پیش میاد
1:در زمان شروع اجرا چند ثانیه برنامه هنگه.که اگه بیخیال اسکرول بار بشم این هنگ به وجود نمیاد.
2:که مشکل اصلیه:یکم که از اجرای برنامه میگذره خطای overflow رو میده و در program.cs خط





Application.Run(new Form1());

رو هایلایت میکنه!!بعضی وقتام اصلا این ارور و نمیده!یه جورایی شانسیه انگار.
اصلا نمیدونم با خطاهایی که از program.cs گرفته میشه چیکار کنم.اونایی که از form.cs میگیره قابل فهمن اما اینارو نمیفهمم.

اینم کد برنامه:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO.Ports;
using DevExpress.XtraCharts;
namespace myProject
{
public partial class Form1 : Form
{
#region Form
static SerialPort _port;
static bool scrollflag;

public Form1()
{
InitializeComponent();
cmbPorts.SelectedIndex = 6;
_port = new SerialPort();
_port.PortName = cmbPorts.SelectedItem.ToString();
_port.BaudRate = 9600;
_port.ReadTimeout = 500;
_port.WriteTimeout = 500;
_port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}
private void Form1_Load(object sender, EventArgs e)
{
}
#endregion
#region Sending BackGroundWorker
private void bckSendCode_DoWork(object sender, DoWorkEventArgs e)
{
sending();
}
private void sending()
{
while(true)
{
try{
if(chk1.Checked==true)
{
_port.Write("a");
Thread.Sleep(400);
}
if(chk2.Checked==true)
{
_port.Write("b");
Thread.Sleep(400);
}
if(chk3.Checked==true)
{
_port.Write("c");
Thread.Sleep(400);
}
}
catch
{
}
}
}
#endregion
#region serialPort
public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{

string y;
y = _port.ReadExisting();
Thread t2 = new Thread(() => adding(y));
t2.Start();
}
void adding(string str)
{
string key = str.Substring(0, 1);
string strData = str.Substring(1, 2);
string data = char.ConvertFromUtf32(int.Parse(strData));
switch (key)
{
case "c":
Invoke(new MethodInvoker(delegate { chart1.Series[2].Points.Add(new SeriesPoint(DateTime.Now, data)); }));
break;
case "b":
Invoke(new MethodInvoker(delegate {chart1.Series[1].Points.Add(new SeriesPoint(DateTime.Now, data));}));
break;
case "a":
Invoke(new MethodInvoker(delegate {chart1.Series[0].Points.Add(new SeriesPoint(DateTime.Now, data));}));
break;
}
}
#endregion

#region Scrolling BackGroundWorker
private void bckScroll_DoWork(object sender, DoWorkEventArgs e)
{
while(!scrollflag)
{
scrolling();
Thread.Sleep(100);
}
}
private void scrolling()
{
SwiftPlotDiagram diagram=chart1.Diagram as SwiftPlotDiagram;
diagram.AxisX.Range.MaxValue=DateTime.Now;
diagram.AxisX.Range.MinValue=DateTime.Now.AddSecon ds(-8);
}
#endregion

#region UI
private void btnPort_Click(object sender, EventArgs e)
{

if (_port.IsOpen == false)
{
try
{
_port.Open();
btnPort.Text = "Close";
}
catch
{
MessageBox.Show("Error: Selected Port \"" +cmbPorts.SelectedItem.ToString()+ "\" does not exist");
}
}
else
{
_port.Close();
btnPort.Text = "Open";
}
}
private void btnStart_Click(object sender, EventArgs e)
{
bckSendCode.RunWorkerAsync();
bckScroll.RunWorkerAsync();
}

#endregion

nhaftad
پنج شنبه 20 مرداد 1390, 14:31 عصر
حد اقل یکی بگه ارور overflow که به اون خط از program.cs میده یعنی چی؟اصلا ارورایی که به program.cs داده میشه برا چین؟اخه من که تو اون قسمت کدیو عوض نکردم.

nhaftad
پنج شنبه 20 مرداد 1390, 18:36 عصر
کمکی نبود؟