0

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

4

0 回答 0