我是TPL和.net 4的新手。我很难实现以下多线程设计。
我想要做的是检查串口并发送数据,然后更新UI(WPF)上的列表框,然后等待1秒再重复一次。
我所做的是:
//from WPF UI thread
var uiThreadTaskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
var bgTask = Task<MonitorStatus>.Factory.StartNew(() =>
{
MonitorStatus status = new MonitorStatus();
//some time consuming job on serial ports
return status;
});
bgTask.ContinueWith(task =>
{
MonitorStatus status = task.Result;
//update the list box
}, uiThreadTaskScheduler);
我最喜欢的是StartNew()和ContinueWith():它在anther线程中开始做一些耗时的工作,并使用task.Result回到UI线程,我可以更新UI。没有明确的同步对象!
但是如何在1秒的时间间隔后一次又一次地保持这种运行? 我想在ContinueWith()的最后一个代码中重新运行整个事情,以便它永远不会停止。但怎么样?
我想到的另一个解决方案是使用threading.timer,但是它的线程在UI线程之外的其他线程中运行,这不像ContinueWith()那样方便。