搜索
bottom↓
回复: 15

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

[复制链接]

出0入0汤圆

发表于 2011-8-7 14:55:03 | 显示全部楼层 |阅读模式
请教一下搞过c#的大虾们。
我最近用c#做一个上位机的程序。从串口收数据并在上位机中用chart控件来画出实时曲线。
但是当有多个chart控件同时运行时,整个程序就会卡死不动,只能在任务管理器里杀掉。
我刚开始学c#,没用到多线程,是不是跟这个有关?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入89汤圆

发表于 2011-8-7 16:41:36 | 显示全部楼层
这个肯定要用多线程的,而且实时绘图也有一定的技巧。

出0入0汤圆

 楼主| 发表于 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[0].XValue < removeBefore )
    {
        ptSeries.Points.RemoveAt(0);
    }

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

出0入0汤圆

发表于 2011-8-7 18:34:15 | 显示全部楼层
C#适合WIN7

出0入12汤圆

发表于 2011-8-7 20:30:55 | 显示全部楼层
楼上胡扯淡
C#出来的时候WIN7还没出生呢
楼主你用多线程了吗?委托,界面卡死和线程有关,和XP,WIN7没关系.

出0入0汤圆

发表于 2011-8-7 21:34:44 | 显示全部楼层
你可以看看Arction LightningChart:
http://www.arction.com/benchmark

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

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

出0入0汤圆

发表于 2011-8-7 21:57:21 | 显示全部楼层
都说WIN7内核提供对C#的支持,其实我认为WIN7也就是安装了.NET Framework而已,有些软件在WIN7上一样需要安装高版本的.NET Framework。因此,个人感觉就是个噱头。

出0入0汤圆

发表于 2011-8-7 22:02:42 | 显示全部楼层
回复【6楼】WithSword  倚剑
-----------------------------------------------------------------------

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

出0入134汤圆

发表于 2011-8-7 22:28:06 | 显示全部楼层
如果你自己用的话还可以   要是给用户的话,你用.NET 4.0  你会死的很惨,很多人连2.0都没装

出0入0汤圆

发表于 2011-8-7 22:35:23 | 显示全部楼层
我现在只用2.0,安装体积小点,3.5以后的体积太大了。

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2011-8-8 00:35:21 | 显示全部楼层
回复【8楼】elecfun  熊
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 2011-8-8 00:37:02 | 显示全部楼层
回复【10楼】arda
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2011-8-8 11:39:46 | 显示全部楼层
你现在还没搞清楚是什么原因造成的假死,用多线程还是白搭的

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

出0入0汤圆

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

多谢大家了。

出0入0汤圆

发表于 2011-8-15 11:15:03 | 显示全部楼层
用四个chart干嘛,用一个就可以了吧,多用几个chartArea啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 13:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表