[问题] dowork & progresschanged

楼主: hangyoon (HangYoon)   2017-09-15 13:05:30
大家好
小弟使用backgroundworker
用button_click启动dowork
Dowork while循环重复接收从MCU传送回来的资料
每接收到一串资料后
便会使用progress report
将资料传到Progress Changed
做资料处理及chart绘图
在dowork内有设置一段时间等待progress changed处理完成
但整个程式执行之后
一开始progress changed处理的时间很短
(我有放一个计时器在progress changed里面)
但随着执行次数变多
Progress changed处理的时间也越来越长
直到progress changed处理时间超过我在dowork设定的等待时间后
整个程式就当掉不跑
图也卡住
而在诊断工具处理序内存字段
程式一开始偶尔出现GC
随着次数增加GC出现频率越来越高
到最后超级密集 程式也跟着当掉
想请问是否我在程式的安排上
能不能等到progress changed完全执行完毕后
再回到dowork while循环里面重复执行撷取资料的动作?
或者我的程序安排本身就有错误?
麻烦各位先进给予指教
作者: smmoon (邦)   2017-09-15 15:37:00
作者: Litfal (Litfal)   2017-09-16 13:41:00
"Progress changed处理的次数也越来越长" 是因为Chart资料愈来愈多吗?
楼主: hangyoon (HangYoon)   2017-09-16 18:01:00
L大 不好意思我打错了 是“时间越来越长”
作者: Litfal (Litfal)   2017-09-16 19:39:00
为什么时间愈来愈长?资料愈来愈多吗?你可以把资料处里也让dowork去做,只有绘图需要放到ProgressChanged里
楼主: hangyoon (HangYoon)   2017-09-16 20:01:00
每次送到progress changed的资料量都一样L大 我会试试看你建议的方法目前dowork是做ADC值的处理 然后把值送到progress changed做我用Matlab function compiler到c# dll 方程式的处理 每次progress changed会做两次matlab function的处理
作者: Litfal (Litfal)   2017-09-17 00:57:00
资料一样多怎么会愈来愈慢?用计时器看看慢在哪里啊
楼主: hangyoon (HangYoon)   2017-09-17 10:08:00
L大 我用了你的建议 把matlab function处理的动作放到dowork里面执行 让progress changed里面只处理绘图的部分就解决死当的问题 已经可以长时间执行不会当掉了 真的很感谢你

Links booklink

Contact Us: admin [ a t ] ucptt.com