我执行以下操作:
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;
}
}
基本上,有一个计时器可以设置令牌以取消这两个任务。一段时间后,计时器重新启动,两个任务应该再次启动。但他们没有。
有人能告诉我为什么吗?两者都只在第一次运行应用程序时启动。
我现在添加了更多代码。当从串口接收到数据时,会调用 EventDataReceived。我进行了调试,计时器做了它应该做的事情。
收到数据 -> 启动任务 -> 启动计时器 ->(如果 3s 没有收到数据)停止任务 ->(如果收到数据)重新启动任务和计时器。
但任务不会重新开始。