3

原则上我正在尝试做一些非常简单的事情,但是我一直遇到一个cross-threading exception让我难过的事情,因为我没有打算使用多个线程。

我有一个 Windows 窗体应用程序。它启动另一个 Windows 窗体应用程序(使用System.Diagnostics.Process该类),并在该应用程序关闭时捕获 Exited 事件。然后,我的应用程序事件处理程序尝试将文本从剪贴板复制到当前显示表单上的控件。此时Cross-threading exception抛出 a。

我认为问题是来自关闭应用程序的事件在另一个线程中(我在这里超出了我的舒适区,所以请耐心等待),所以问题归结为“如何防止这种异常?”

我在某种程度上不得不从剪贴板复制,但如果这样可以解决问题,我可以以不同的方式启动另一个应用程序。

4

1 回答 1

5

Exited事件不会在 UI 线程中触发,它会在Process该类创建的一些后台线程中触发以监视其他进程。

您需要编组到 UI 线程以访问控件,这可以通过使用以下Control.Invoke方法来完成:

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