如何定期调用任务CreateNew()/ ContinueWith()?

时间:2013-10-18 05:23:24

标签: multithreading

我是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()那样方便。

0 个答案:

没有答案