私は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() ほど便利ではありません。