web-dev-qa-db-ja.com

別のスレッドからフォームを閉じる

私は_.exe_を実行するこのコードを持っています

_string openEXE = @"C:\Users\marek\Documents\Visual Studio 2012\Projects\tours\tours\bin\Debug\netpokl.exe";
                 Process b = Process.Start(openEXE);
                 b.EnableRaisingEvents = true;
                 b.Exited += (netpokl_Closed);
_

そして、それが閉じると、メソッドnetpokl_Closedを呼び出します。問題は、私が_insert into netpokl_Closed command_ --this.Close()この例外が発生したときです:_Cross-thread operation not valid: Control accessed from a thread other than the thread it was created on_

どうすれば修正できますか?お手数をおかけしますが、よろしくお願いいたします。

12
Marek

作成されたスレッド以外のスレッドからフォームを閉じようとしているため、例外が発生します。これは許可されていません。

このようにします

this.Invoke((MethodInvoker) delegate
        {
            // close the form on the forms thread
            this.Close();
        });
36
Ehsan

コントロールの作成スレッド以外のスレッドがそのコントロールのメソッドまたはプロパティの1つにアクセスしようとすると、予期しない結果が生じることがよくあります。一般的な無効なスレッドアクティビティは、コントロールのHandleプロパティにアクセスする間違ったスレッドの呼び出しです。

アプリケーションのデバッグ中に、コントロールのHandleプロパティにアクセスする間違ったスレッドでの呼び出しをキャッチするかどうかを示す値を取得または設定します。

見て

http://msdn.Microsoft.com/en-us/library/system.windows.forms.control.checkforillegalcrossthreadcalls.aspx

1
Andrew