我执行以下操作:
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没有收到数据)停止任务 - > (如果收到数据)重启任务和计时器。
但任务不会重新开始。