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;
            }

    }

基本的に、2 つのタスクをキャンセルするトークンを設定するタイマーがあります。A の後、タイマーが再起動され、2 つのタスクが再び開始されます。しかし、そうではありません。

誰かが理由を教えてもらえますか? どちらも、アプリケーションを初めて実行したときにのみ開始されます。

私は今、より多くのコードを追加しました。シリアルポートからデータを受信すると、EventDataReceived が呼び出されます。私はデバッグし、タイマーはそれがすべきことをします。

データを受信 -> タスクを開始 -> タイマーを開始 -> (3 秒間データを受信しなかった場合) タスクを停止 -> (データを受信した場合) タスクとタイマーを再起動します。

しかし、タスクは再開されません。

4

0 に答える 0