首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中分别处理设备通信和图形用户界面更新

在C#中分别处理设备通信和图形用户界面更新
EN

Stack Overflow用户
提问于 2011-05-17 05:09:56
回答 2查看 107关注 0票数 0

我正在开发一个应用程序,它以明确定义的时间间隔扫描来自连接的扫描仪的图像,例如每5分钟,持续指定的时间量。当我的应用程序运行时,我有一个标签(timerlabel)在倒计时项目剩余的总时间,这是由一个每秒更新标签的DispatcherTimer处理的。

扫描仪由另一个扫描处理,该扫描仪每隔五分钟将为每个扫描仪调用一个函数DispatcherTimer ()。当调用此函数时,扫描开始,但GUI停止更新,并且timerlabel在扫描期间冻结。当它再次启动时,它只是继续倒计时,而不是记录扫描进行时所经过的时间。

如何让timerlabel在扫描过程中保持运行?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-17 05:22:00

尝试派生后台线程。不是直接调用DispatchTimer调用Scan(),而是让它在调用Scan()的委托或lambda上调用BeginInvoke()。现在,Scan()将在另一个线程中运行,让UI线程自由地响应图形消息。

如果Scan()将更新UI控件,如图像或文本框文本,则需要将任何此类逻辑封装在传递给窗口的Invoke()方法的委托中。这将防止“交叉线程”,这在处理UI时是危险的,并且会导致运行时抛出异常。

票数 1
EN

Stack Overflow用户

发布于 2011-05-17 05:27:48

虽然不能确保获得完整的信息,但我会尝试通过BackgroundWorker启动您的Scan()方法,它支持通过烘焙的委托进行进度计量,该委托是在相应的DispatchTimer()触发时创建的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6023484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档