我在Winforms应用程序中的MainForm上几乎没有控件。例如,用于更新每个操作的进度的控件。这些操作是在不同的Thread中运行的类。
如何正确更新这些控件?
答案 0 :(得分:1)
最好的方法是通过活动来做到这一点。 更简单的方法是直接更改它们。
确保它们是公开的并且您将它们覆盖到课堂上,然后您可以更改它
Invoke(new MethodInvoker(delegate { frmMain.label1.Text = "bla"; }));
答案 1 :(得分:1)
在主表单中,您可以添加类似这样的功能
private delegate void doSomethingWithTheControlsDelegate(object obj);
public void doSomethingWithTheControls(object obj) {
if (this.InvokeRequired) {
this.BeginInvoke(new doSomethingWithTheControlsDelegate(this.doSomethingWithTheControls), obj);
} else {
// do something
}
}
答案 2 :(得分:0)
我建议使用一个模型类,它将包含显示给用户的数据。将UI控件数据绑定到模型的属性,并从工作线程更新模型值(使用适当的调用以确保在UI线程上进行更新,以便您不会获得跨线程异常)