我正在开发一个应用程序,它以明确定义的时间间隔扫描来自连接的扫描仪的图像,例如每5分钟,持续指定的时间量。当我的应用程序运行时,我有一个标签(timerlabel)在倒计时项目剩余的总时间,这是由一个每秒更新标签的DispatcherTimer处理的。
扫描仪由另一个扫描处理,该扫描仪每隔五分钟将为每个扫描仪调用一个函数DispatcherTimer ()。当调用此函数时,扫描开始,但GUI停止更新,并且timerlabel在扫描期间冻结。当它再次启动时,它只是继续倒计时,而不是记录扫描进行时所经过的时间。
如何让timerlabel在扫描过程中保持运行?
发布于 2011-05-17 05:22:00
尝试派生后台线程。不是直接调用DispatchTimer调用Scan(),而是让它在调用Scan()的委托或lambda上调用BeginInvoke()。现在,Scan()将在另一个线程中运行,让UI线程自由地响应图形消息。
如果Scan()将更新UI控件,如图像或文本框文本,则需要将任何此类逻辑封装在传递给窗口的Invoke()方法的委托中。这将防止“交叉线程”,这在处理UI时是危险的,并且会导致运行时抛出异常。
发布于 2011-05-17 05:27:48
虽然不能确保获得完整的信息,但我会尝试通过BackgroundWorker启动您的Scan()方法,它支持通过烘焙的委托进行进度计量,该委托是在相应的DispatchTimer()触发时创建的。
https://stackoverflow.com/questions/6023484
复制相似问题