質問: false ; // Aさん:問題が起きたからチェック外しとくね AddLog( ex + "\r\n" , Color.Blue ) ; // Aさん:起きた問題はログブックに書き込んどくよ } } else // Aさん:もしチェックが外れたら { tokenSource.Cancel( ) ; // Aさん:仕事1はやめてもらうよ } } private async Task 仕事1( CancellationToken token ) { while ( true ) // Bさん:Aさんから仕事中止の命令がこない間はずっと { 書き込み作業( pid , addr , ofst ) ; // Bさん:書き込み作業します await Task.Delay( 150 ).ConfigureAwait( false ) ; // Bさん:0.15秒次の作業遅れます。遅れてもAさんには支障ないです if ( token.IsCancellationRequested ) // Bさん:Aさんから仕事中止の命令がきたら { 書き込み作業終了( pid , addr , ofst ) ; // Bさん:チェックが解除されたから書き込み作業終了します break ; // Bさん:書き込み作業はやめます } } } ```
回答: > > > ``` > await Task.Run( async( ) => 仕事1( ) ) ; > > ``` > > は`仕事1()`を別スレッドで実行することを意味します。なお、WinFormsでは別スレッドからGUI要素(コントロール)を操作することは許されていません。そのため、`仕事1()`メソッド内の > > > ``` > while ( 仕事1.Checked ) > > ``` > > は不正なアクセスです。