在WinForms中,如何从UI线程强制立即进行UI更新?
我正在做的大致是:
label.Text = "Please Wait..." try { SomewhatLongRunningOperation(); } catch(Exception e) { label.Text = "Error: " + e.Message; return; } label.Text = "Success!";
在操作之前,标签文本未设置为“ Please Wait …”。
我使用另一个线程解决了这个问题,但是它变得繁琐,我想简化代码。
最初,我想知道为什么OP尚未将其中一个答案标记为答案,但是在我自己尝试并且仍然无法正常工作之后,我更深入地挖掘了一下,发现这个问题还有很多,然后我首先应该。
通过阅读类似的问题可以获得更好的理解:为什么不控制中间过程的更新/刷新
最后,作为记录,我可以通过执行以下操作来更新标签:
private void SetStatus(string status) { lblStatus.Text = status; lblStatus.Invalidate(); lblStatus.Update(); lblStatus.Refresh(); Application.DoEvents(); }
尽管从我的理解来看,这远远不是一种优雅而正确的方法。取决于线程的繁忙程度,这是一种可能有效或无效的技巧。