在代码完成之前,GUI不会更新

And*_*Hin 7 c# label

嘿,我有一系列代码如下:

label.Text = "update 0";
doWork();
label.Text = "update 1";
doWork2();
label.Text = "update 2";
Run Code Online (Sandbox Code Playgroud)

基本上,在完成所有代码执行之前,GUI根本不会更新.怎么克服这个?

Mar*_*ers 16

一个丑陋的黑客是使用Application.DoEvents.虽然这有效,但我建议不要这样做.

更好的解决方案是使用一个BackgroundWorker或一个单独的线程来执行长时间运行的任务.不要使用GUI线程,因为这会导致它阻塞.

需要注意的一件重要事情是,必须在GUI线程上对GUI进行更改,因此您需要将控制权转移回GUI线程,以便标记更新.这是使用完成的Invoke.如果您使用BackgroundWorker,则可以使用ReportProgress - 这将自动为您调用Invoke.

  • 关于[后台工人类]的详细信息(http://bit.ly/a9VgVn)和[如何使用它的例子](http://bit.ly/ailRTF) (3认同)