进程结束时更新表单控件

时间:2015-03-05 11:33:00

标签: c# .net winforms c#-4.0 asynchronous

当用户单击表单上的按钮时,我希望并行启动多个进程,并在每个进程完成时更新同一表单上的列表框。

Process.Exited事件似乎是我的朋友(记得要设置EnableRaisingEvents属性)。我假设我必须使用委托和Control.Invoke来更新控件,但后来我注意到了Process.SyncronizingObject属性。

当事件被触发时,他们的示例并没有实际显示正在修改的表单/控件,所以我想确保我理解正确。

如果我将Process.SyncronizingObject设置为Form这是否意味着我的Process.Exited事件处理程序方法可以直接修改表单,以及任何子控件?< / p>

因此,通过这种方式,我可以在一个简单的for循环中运行一堆进程,它将并行运行,并在每次完成时更新我的​​GUI,而不需要任何代表,锁定等?

1 个答案:

答案 0 :(得分:1)

我不知道可以说有多清楚: from msdn

  

当可视Windows窗体组件处理Exited事件时,   例如Button,通过系统线程访问组件   池可能不起作用,或者可能导致异常。避免这样做   将SynchronizingObject设置为Windows窗体组件,这会导致   处理要在相同线程上调用的Exited事件的方法   在哪个组件上创建