3

さて、いくつかのクラスを持つ C# フォームがあります。これらのクラスの 1 つで、スレッドを実行して、外部プログラムが実行されているかどうかを確認しています。外部プログラムが実行されていないときに、プログラムを閉じたい。

私は少し初心者なので、明白な答えは form.Close() を使用することです。しかし、サブクラスや別のスレッドからこの関数にアクセスできるかどうかはわかりません!

だから私の質問は: (どのように) 他のクラスの別のスレッドからフォームを閉じることは可能ですか? もっと重要なのは、このベストプラクティスですか?

4

1 に答える 1

2

UI スレッドでメソッドを呼び出すためにControl.InvokeRequiredandを使用できます。Control.BeginInvoke()

例 (このメソッドはフォーム クラス自体の中にある必要があります):

public void CloseForm()
{
    if (this.InvokeRequired)
    {
        this.BeginInvoke(new Action(this.Close));
    }
    else
    {
        this.Close();
    }
}

これは、別のスレッドから安全に呼び出すことができます。

于 2013-04-18T08:09:38.417 に答える