当用户单击表单上的按钮时,我希望并行启动多个进程,并在每个进程完成时更新同一表单上的列表框。
Process.Exited
事件似乎是我的朋友(记得要设置EnableRaisingEvents
属性)。我假设我必须使用委托和Control.Invoke
来更新控件,但后来我注意到了Process.SyncronizingObject
属性。
当事件被触发时,他们的示例并没有实际显示正在修改的表单/控件,所以我想确保我理解正确。
如果我将Process.SyncronizingObject
设置为Form
这是否意味着我的Process.Exited
事件处理程序方法可以直接修改表单,以及任何子控件?< / p>
因此,通过这种方式,我可以在一个简单的for
循环中运行一堆进程,它将并行运行,并在每次完成时更新我的GUI,而不需要任何代表,锁定等?
答案 0 :(得分:1)
我不知道可以说有多清楚: from msdn
当可视Windows窗体组件处理Exited事件时, 例如Button,通过系统线程访问组件 池可能不起作用,或者可能导致异常。避免这样做 将SynchronizingObject设置为Windows窗体组件,这会导致 处理要在相同线程上调用的Exited事件的方法 在哪个组件上创建。