public async Task StartCheck() { var dis = App.Current.Dispatcher; while (true) { await Task.Run(() => { RETRY: while (true) { if (Flags.OtherPage) { break; } //Thread.Sleep(200); //作業者名、工番が正しく入力されているかの判定 if (!Flags.SetOperator) { State.VmTestStatus.Message = Constants.MessOperator; Flags.EnableTestStart = false; continue; } if (!Flags.SetOpecode) { State.VmTestStatus.Message = Constants.MessOpecode; Flags.EnableTestStart = false; continue; } General.CheckAll周辺機器フラグ(); if (!Flags.AllOk周辺機器接続) { State.VmTestStatus.Message = Constants.MessConnect; Flags.EnableTestStart = false; continue; } dis.BeginInvoke(StopButtonBlinkOn); State.VmTestStatus.Message = Constants.MessSet; Flags.EnableTestStart = true; Flags.Click確認Button = false; while (true) { if (Flags.OtherPage || Flags.Click確認Button) { dis.BeginInvoke(StopButtonBlinkOff); return; } if (!Flags.SetOperator || !Flags.SetOpecode) { dis.BeginInvoke(StopButtonBlinkOff); goto RETRY; } } } }); if (Flags.OtherPage) { //Flags.PressOpenCheckBeforeTest = true; return; } State.VmMainWindow.EnableOtherButton = false; State.VmTestStatus.StartButtonContent = Constants.停止; State.VmTestStatus.TestSettingEnable = false; State.VmMainWindow.OperatorEnable = false; await Test();//メインルーチンへ //試験合格後、ラベル貼り付けページを表示する場合は下記のステップを追加すること if (Flags.ShowLabelPage) { return; } //日常点検合格、一項目試験合格、試験NGの場合は、Whileループを繰り返す //通常試験合格の場合は、ラベル貼り付けフォームがロードされた時点で、一旦StartCheckメソッドを終了します //その後、ラベル貼り付けフォームが閉じられた後に、Test.xamlがリロードされ、そのフォームロードイベントでStartCheckメソッドがコールされます } }