こんにちは。
BackGroundWorkerでの処理を記述した所、問題なく動作したのですが、
スレッド内での処理を見ようとブレークポイントを設置(ソース14行目)した所、
ブレークポイントでの停止はされたものの、F5で継続した所、DoWorkを処理中のスレッドが停止した様になりCompletedメソッドが呼ばれない状態になりました。
スレッド内でコードデバッカを正しく使うにはどうしたら良いでしょうか?
ひょっとするとスレッド利用方法の低次元の問題かもしれませんがよろしくお願いします。
001 namespace BackGroundWorkerTest
002 {
003 public partial class Form1 : Form
004 {
005 public Form1()
006 {
007 InitializeComponent();
008 }
009
010 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
011 {
012 for(int i=0;i<=100;i+=1)
013 {
014 Thread.Sleep(20);
015
016 if (backgroundWorker1.CancellationPending)
017 {
018 e.Cancel = true;
019 break;
020 }
021
022 backgroundWorker1.ReportProgress(i);
023 }
024 }
025
026 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
027 {
028 progressBar1.Value = e.ProgressPercentage;
029 }
030
031 private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
032 {
033 if (e.Cancelled)
034 {
035 textBox1.Text = "Canceled!";
036 }
037 else
038 {
039 textBox1.Text = "Done!";
040 }
041 button1.Enabled = true;
042 button2.Enabled = false;
043 }
044
045 private void button1_Click(object sender, EventArgs e)
046 {
047 button1.Enabled = false;
048 button2.Enabled = true;
049
050 textBox1.Text = "In Progress";
051 backgroundWorker1.RunWorkerAsync();
052 }
053
054 private void button2_Click(object sender, EventArgs e)
055 {
056 button1.Enabled = true;
057 button2.Enabled = false;
058
059 backgroundWorker1.CancelAsync();
060 }
061
062 }
063 }