C# でWindows Formのアプリケーションを作成するにあたり、スレッドを使用するために、
ひとまずプロトとして、プログレスバーの表示を変化させている最中にボタンをクリック
するプログラムを作成しています。
メインとして実施したい動作はできるようになりましたが、Form右上の×ボタンを押下
すると、invokeを実行している箇所でSystem.ObjectDisposedExceptionが発生します。
disposeを行わなければいけないということはわかったのですが、どこでどのように
実行すればいけないのかがわかりません。すみませんがご教授お願いいたします。
C#
1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 private void Form1_Load(object sender, System.EventArgs e) 9 { 10 Thread trd = new Thread(new ThreadStart(ThreadTask)); 11 trd.Start(); 12 } 13 14 delegate void delegate1(int newval); 15 16 private void ThreadTask() 17 { 18 int stp; 19 int newval; 20 Random rnd = new Random(); 21 22 while (true) 23 { 24 stp = this.progressBar1.Step * rnd.Next(-1, 2); 25 newval = this.progressBar1.Value + stp; 26 27 if (newval > this.progressBar1.Maximum) 28 newval = this.progressBar1.Maximum; 29 else if (newval < this.progressBar1.Minimum) 30 newval = this.progressBar1.Minimum; 31 if (InvokeRequired) 32 { 33 Invoke(new delegate1(setData), newval); 34 } 35 36 Thread.Sleep(100); 37 } 38 } 39 40 void setData(int newval) 41 { 42 this.progressBar1.Value = newval; 43 } 44 45 private void button1_Click(object sender, EventArgs e) 46 { 47 MessageBox.Show("This is the main thread"); 48 } 49 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。