6

したがって、ラベルを更新するこの単純なクラスがあり、さまざまなスレッドからアクセスされ、アプリケーションの進行状況が報告されます。正常に動作しますが、このアプリを閉じると、このコードは、破棄されたものにアクセスしようとすると常にエラーをスローします。

private delegate void SetLabelTextDelegate(string str1, string str2);
public void SetLabelText(string str1, string str2)
{
    if (this.label1.InvokeRequired || this.label2.InvokeRequired)
    {
        this.Invoke(new SetLabelTextDelegate(SetLabelText), new object[] { str1, str2});
        return;
    }
    this.label1.Text = (str1 == string.Empty) ? this.label1.Text : str1;
    this.label2.Text = (str2 == string.Empty) ? this.label2.Text : str2;
}

これはこれを行うための適切な方法ではありませんか?アプリの終了中にUIの更新を実行しないようにするために、追加する必要があるものはありますか?

4

1 に答える 1

1

受け取っているObjectDisposedExceptionは、まだ完了していない呼び出し(キュー内)があるときにフォームを閉じたことが原因である可能性があります。フォームを閉じる前に呼び出しの完了を許可するか、ObjectDisposedExceptionを処理する必要があります。

見る:

于 2012-11-15T21:55:39.583 に答える