###前提・実現したいこと
backgroudworkerを用いてコピーする処理を実装しております。
その中で実現方法が見えないものがあり、困っております。
コピー中に表示する画面にキャンセルボタンを設け、そのボタンを押すと、
キャンセル確認画面を表示します。その画面で「はい」ボタンを押すと、そこで初めてコピーをキャンセルする、
というやり方を考えてるのですが、実現方法がまったく見えないです・・・
キャンセル確認画面を表示中は、backgroudworkerの処理を停止し、
キャンセル確認画面で「はい」を押すと、backgroudworkerの処理をキャンセル処理を呼び出し、
「いいえ」を押すと、backgroudworkerの処理を再開する、ということができればとは思うのですが・・・
(キャンセルボタンを押してすぐキャンセル処理をする、であれば下記のソースコードで実現はできております。)
Backgroundworkerの処理の一時停止および再開する、ということはできるのでしょうか?
助けれいただければ幸いです・・・
###該当のソースコード
C#
public Copying() { _backgroundWorker.DoWork += new DoWorkEventHandler(Worker_DoWork); _backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(Worker_ProgressChanged); _backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted); // 進捗状況の報告をできるようにする _backgroundWorker.WorkerReportsProgress = true; // キャンセル処理をできるようにする _backgroundWorker.WorkerSupportsCancellation = true; // バックグラウンド処理の実行 _backgroundWorker.RunWorkerAsync(); } // コピー処理 void Worker_DoWork(object sender, DoWorkEventArgs e) { if (_backgroundWorker.CancellationPending) { // キャンセル処理 e.Cancel= true break; } // 実際のコピー処理 } // コピー中画面でキャンセルボタンクリック private void Cancel_Click(object sender, RoutedEventArgs e) { if( true == _backgroundWorker.IsBusy) { // キャンセル要求 _backgroundWorker.CancelAsync(); } } // 処理が完了 void Worker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) { if ( true == e.Cancelled) { //キャンセルが押下された場合の処理 } } // 閉じるボタン(×ボタン)押下された(キャンセルボタンクリックと同じ処理) private void Closing_Click(object sender, CancelEventArgs e) { if (true == _backgroundWorker.IsBusy) { // キャンセル要求 _backgroundWorker.CancelAsync(); } }

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