0

我执行以下操作:

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 没有收到数据)停止任务 ->(如果收到数据)重新启动任务和计时器。

但任务不会重新开始。

4

0 回答 0