意外的交叉线程问题

时间:2012-12-10 16:57:10

标签: c# multithreading process

我正在尝试做一些非常简单的事情,但我不断得到一个让我难倒的cross-threading exception因为我没有开始使用多个线程。

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

我认为问题在于关闭应用程序中的事件是在另一个线程中(我在我的舒适区之外,所以请耐心等待),所以问题归结为“如何防止此异常? “

我有点不得不从剪贴板复制,但如果可以解决问题,我可以用不同的方式启动其他应用程序。

1 个答案:

答案 0 :(得分:5)

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

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

textbox1.Invoke(new Action(()=> textbox1.Text = Process.ExitCode.ToString()));