我是 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():它开始在另一个线程中做一些耗时的工作,然后用 task.Result 回到 UI 线程,我可以更新 UI。没有明确的同步对象!
但是我怎样才能在 1 秒的时间间隔后一次又一次地保持这个运行呢?我想在 ContinueWith() 的最后一个代码处重新运行整个事情,这样它就永远不会停止。但如何?
我想到的另一个解决方案是使用threading.timer,但它的线程运行在UI线程之外的其他线程中,这不如ContinueWith()方便。