C# でスレッドとメソッド呼び出しについて学び始めたばかりですが、解決策が見つからない問題に遭遇しました。
スレッドを開始してデリゲートを呼び出すことで、数値を更新して表示し続ける基本的な C# 形式のプログラムを作成しました。
Form1_load で新しいスレッドを開始:
private void Form1_Load(object sender, EventArgs e)
{
t = new System.Threading.Thread(DoThisAllTheTime);
t.Start();
}
Public void DoThisAllTheTime (番号を更新し続ける) :
public void DoThisAllTheTime()
{
while(true)
{
if (!this.IsDisposed)
{
number += 1;
MethodInvoker yolo = delegate() { label1.Text = number.ToString(); };
this.Invoke(yolo);
}
}
}
フォームの X ボタンをクリックすると、次の例外が発生します。
'System.Windows.Forms.dll で 'System.ObjectDisposedException' 型の未処理の例外が発生しました
削除されたオブジェクトを更新できません'
フォームが破棄されたかどうかを実際に確認しましたが。
編集: 問題を修正したコードに catch (ObjectDisposedException ex) を追加しました。作業コード:
public void DoThisAllTheTime()
{
while(true)
{
number += 1;
try {
MethodInvoker yolo = delegate() { label1.Text = number.ToString(); };
this.Invoke(yolo);
}
catch (ObjectDisposedException ex)
{
t.Abort();
}
}
}