为什么在c#winform中表单GUI元素更新混乱

为什么在c#winform中表单GUI元素更新混乱,c#,winforms,user-interface,listbox,C#,Winforms,User Interface,Listbox,我有很重的UI操作。我在窗体上显示一个沉重的实时图表和一个列表框以及其他控件 现在我的问题是UI线程更新图表和列表框以及其他控件混乱,因为当图表不断更新时,列表框很长时间没有更新 为了解决这个问题,我在“添加到列表框”之后添加了一行,然后我的问题就解决了 Listbox.update(); 但我认为有一个我没有意识到的大问题,我只是隐藏了这个问题 总结一下为什么表单控件会以草率或无序的方式更新?在这种情况下,在完成繁重的操作之前,UI上的任何组件都不会更新。我假设您的代码如下所示: publi

我有很重的UI操作。我在窗体上显示一个沉重的实时图表和一个列表框以及其他控件

现在我的问题是UI线程更新图表和列表框以及其他控件混乱,因为当图表不断更新时,列表框很长时间没有更新

为了解决这个问题,我在“添加到列表框”之后添加了一行,然后我的问题就解决了

Listbox.update();
但我认为有一个我没有意识到的大问题,我只是隐藏了这个问题


总结一下为什么表单控件会以草率或无序的方式更新?

在这种情况下,在完成繁重的操作之前,UI上的任何组件都不会更新。我假设您的代码如下所示:

public protected doSomeThing(Sender e, Evets args)
{
   ...
   Listbox.update();
   HeavyOperations();
   ...
}
在完成HeavyOperations()之前,不会更新您的列表框。因此,您必须在不同的线程上运行HeavyOperations()

看看这个:
阅读此参考资料,这里有一个完美的例子,说明您需要学习和执行的内容

需要一个更大的代码段来查看发生了什么。请注意,我在非UI线程上执行heavyoperation,并在AddtoListbox和update listbox上执行跨线程操作。现在我看到除了Listox之外,还有其他表单控件在timer tik事件中更新,但是表单上有冻结