コード例 #1
0
        // 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.");
            });
        }