wpfのキャンセル処理を実装したいのですがエラーで悩まされているので質問します。
Button_Clickイベントハンドラーが起こった直後にボタン3をクリックすることでキャンセルしようと思ったのですがうまくいきません。
Main
1//フィールド 2 CancellationTokenSource cts; 3 4//ボタンクリックされた際のイベントハンドラー 5private void Button_Click(object sender, RoutedEventArgs e) 6 7{ 8 cts = new CancellationTokenSource() 9 //ClassAの静的な非同期メソッドにキャンセルトークンを受け渡す 10 ClassA.Execute(text ,cts.Token); 11 } 12 13//Cancel 14private void Button_Click_3(object sender, RoutedEventArgs e) 15{ 16 //ここでエラーが発生 17 if (cts != null) { cts.Cancel(); } 18}
ClassA
1 2public static async void Execute(string text,CancellationToken cts) 3{ 4 await Task.Run(() => 5 { 6try 7{ 8 Thread.Sleep(5000); 9 if (cts.IsCancellationRequested) { throw new OperationCanceledException(); } 10 Thread.Sleep(5000); 11} 12catch{} 13 }); 14}
エラーの内容は下の通りです。
System.ObjectDisposedException: 'CancellationTokenSource が破棄されました。'
ctsが破棄されているからエラーが発生するのかと思いこのようにコードを改善しましたが変わりません。
using (cts = new CancellationTokenSource()) { cts = new CancellationTokenSource() //ClassAの静的な非同期メソッドにキャンセルトークンを受け渡す ClassA.Execute(text ,cts.Token); }
宜しければご回答お願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。