私は次のことを行います:
private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
tokenSource.Cancel();
receiveDataTimer.Stop();
Console.WriteLine("TIMER DONE");
}
private void EventDataReceived(Message msg)
{
dataQue.Enqueue(msg.data);
var context = new DispatcherSynchronizationContext(Application.Current.Dispatcher);
if(receiveDataTimer.Enabled==false)
{
Console.WriteLine("START TASK");
tokenSource = new CancellationTokenSource();
Task.Factory.StartNew(() => Work(tokenSource.Token, MaxPoints), tokenSource.Token);
Task.Factory.StartNew(() => Update(context, tokenSource.Token), tokenSource.Token);
receiveDataTimer.Start();
}
else
{
receiveDataTimer.Interval=3000;
}
}
基本的に、2 つのタスクをキャンセルするトークンを設定するタイマーがあります。A の後、タイマーが再起動され、2 つのタスクが再び開始されます。しかし、そうではありません。
誰かが理由を教えてもらえますか? どちらも、アプリケーションを初めて実行したときにのみ開始されます。
私は今、より多くのコードを追加しました。シリアルポートからデータを受信すると、EventDataReceived が呼び出されます。私はデバッグし、タイマーはそれがすべきことをします。
データを受信 -> タスクを開始 -> タイマーを開始 -> (3 秒間データを受信しなかった場合) タスクを停止 -> (データを受信した場合) タスクとタイマーを再起動します。
しかし、タスクは再開されません。