3

私は原則として非常に単純なことをしようとしていますが、cross-threading exception複数のスレッドを使用するように設定していないため、困惑し続けています。

Windowsフォームアプリケーションがあります。(クラスを使用して)別のWindowsフォームアプリケーションを起動しSystem.Diagnostics.Process、そのアプリケーションが閉じられたときにExitedイベントをキャッチします。次に、アプリケーションイベントハンドラーは、クリップボードから現在表示されているフォームのコントロールにテキストをコピーしようとします。この時点でaCross-threading exceptionがスローされます。

問題は、アプリケーションを閉じることからのイベントが別のスレッドにあることだと思います(私はここで快適ゾーンの外にいるので、我慢してください)。したがって、質問は「この例外を防ぐにはどうすればよいですか?」に要約されます。

クリップボードからコピーする必要があるという制約がありますが、問題が解決する場合は、別の方法で他のアプリケーションを起動できます。

4

1 に答える 1

5

ExitedイベントはUIスレッドでは発生しません。他のプロセスを監視するために、クラスによって作成されたバックグラウンドスレッドで発生しますProcess

Control.Invokeコントロールにアクセスするには、UIスレッドにマーシャリングする必要があります。これは、次の方法を使用して実行できます。

textbox1.Invoke(new Action(()=> textbox1.Text = Process.ExitCode.ToString()));
于 2012-12-10T17:02:20.363 に答える