// Model中心処理タスク private async void CenterTask() { string cmdStr = string.Empty; await Task.Run(() => { while (true) { cmdStr = myEvQ.GetEvent(); // Idle 状態 if (currentState == IDLE) { if (cmdStr == "StartCmd") { ChangeState(EXE1); System.Threading.Thread.Sleep(2000); // わざと2Sec Sleep myEvQ.SetEvent("ReqEXE2Cmd"); } else if (cmdStr == "AbortCmd") { ChangeState(IDLE); } else if (cmdStr == "EndCmd") { ChangeState(END); break; } } // EXE1状態 else if (currentState == EXE1) { if (cmdStr == "ReqEXE2Cmd") { ChangeState(EXE2); // 5秒 OneShotTimer 開始 OneShotOneSecTimer = new Timer(5000); OneShotOneSecTimer.Elapsed += timeoutProc; OneShotOneSecTimer.AutoReset = false; // Event1回のみ発生 OneShotOneSecTimer.Start(); } else if (cmdStr == "AbortCmd") { ChangeState(IDLE); } else if (cmdStr == "EndCmd") { ChangeState(END); break; } } // EXE2状態 else if (currentState == EXE2) { if (cmdStr == "SeqEndCmd") { ChangeState(IDLE); } else if (cmdStr == "AbortCmd") { OneShotOneSecTimer.Stop(); ChangeState(IDLE); } else if (cmdStr == "EndCmd") { ChangeState(END); break; } } } myEvQ.EndProc(); Console.WriteLine("Exit CenterTask."); }); }