learningAVR 发表于 2011-8-7 14:55:03

c#上位机开发在程序运行时老是卡死?

请教一下搞过c#的大虾们。
我最近用c#做一个上位机的程序。从串口收数据并在上位机中用chart控件来画出实时曲线。
但是当有多个chart控件同时运行时,整个程序就会卡死不动,只能在任务管理器里杀掉。
我刚开始学c#,没用到多线程,是不是跟这个有关?

youkebing 发表于 2011-8-7 16:41:36

这个肯定要用多线程的,而且实时绘图也有一定的技巧。

learningAVR 发表于 2011-8-7 17:41:32

回复【1楼】youkebing
-----------------------------------------------------------------------

我用的是vs2010,.NET Frame 4.0里边有chart控件。
实时曲线代码部分大概是这样(参考dundas里面的例子)

// remove all points from the source series older than 1.5 minutes.
    double removeBefore = timeStamp.AddSeconds( (double)(90) * ( -1 )).ToOADate();
    //remove oldest values to maintain a constant number of data points
    while ( ptSeries.Points.XValue < removeBefore )
    {
      ptSeries.Points.RemoveAt(0);
    }

    chart1.ChartAreas.AxisX.Minimum = ptSeries.Points.XValue;
    chart1.ChartAreas.AxisX.Maximum = DateTime.FromOADate(ptSeries.Points.XValue).AddMinutes(2).ToOADate();

rainmanya 发表于 2011-8-7 18:34:15

C#适合WIN7

skynet 发表于 2011-8-7 20:30:55

楼上胡扯淡
C#出来的时候WIN7还没出生呢
楼主你用多线程了吗?委托,界面卡死和线程有关,和XP,WIN7没关系.

theophilus 发表于 2011-8-7 21:34:44

你可以看看Arction LightningChart:
http://www.arction.com/benchmark

根据你的需求Basic版本应该就能满足,这个是Free的:
http://www.arction.com/products_lc_basic

MS Chart据我的使用经验,适合生成静态图表。

WithSword 发表于 2011-8-7 21:57:21

都说WIN7内核提供对C#的支持,其实我认为WIN7也就是安装了.NET Framework而已,有些软件在WIN7上一样需要安装高版本的.NET Framework。因此,个人感觉就是个噱头。

theophilus 发表于 2011-8-7 22:02:42

回复【6楼】WithSword倚剑
-----------------------------------------------------------------------

Windows NT 内核好歹是混合内核,是不会带Framework的。

elecfun 发表于 2011-8-7 22:28:06

如果你自己用的话还可以   要是给用户的话,你用.NET 4.0你会死的很惨,很多人连2.0都没装

winfisher 发表于 2011-8-7 22:35:23

我现在只用2.0,安装体积小点,3.5以后的体积太大了。

arda 发表于 2011-8-7 23:19:33

C#的前台界面是STA单线程的,你要是有好多event导致事件更新过于频繁,就可能会使得界面卡死。
最好吧处理数据和显示数据分开到不同的线程上。另外你要让出来点时间让前台UI线程能够刷新。

learningAVR 发表于 2011-8-8 00:35:21

回复【8楼】elecfun熊
-----------------------------------------------------------------------

我还是学生。。。最近要参加一个比赛用的,才看了三四天C#,线程那些高深的还不是很懂。。

learningAVR 发表于 2011-8-8 00:37:02

回复【10楼】arda
-----------------------------------------------------------------------

嗯,我明天试试看多线程。。。

lxlylm 发表于 2011-8-8 11:39:46

你现在还没搞清楚是什么原因造成的假死,用多线程还是白搭的

检查一下串口数据的量,Chart刷新的时间,是由于Evnet太多造成的卡死,还是Chart来不及刷新造成的假死

learningAVR 发表于 2011-8-8 23:54:21

今天用了多线程,顺利解决了。
其实我的数据量很小,每次就5个字节。不过每隔几秒就发一次。
我用了4个chart,还有别的label,textbox也要随数据变化。
应该是event太多了吧,我给每个chart都分了一个线程,就好了。
之前开两个都经常卡,现在4个全开都很流畅。

多谢大家了。

liuyong053 发表于 2011-8-15 11:15:03

用四个chart干嘛,用一个就可以了吧,多用几个chartArea啊
页: [1]
查看完整版本: c#上位机开发在程序运行时老是卡死?