一尘不染

从UI线程强制进行GUI更新

c#

在WinForms中,如何从UI线程强制立即进行UI更新?

我正在做的大致是:

label.Text = "Please Wait..."
try 
{
    SomewhatLongRunningOperation(); 
}
catch(Exception e)
{
    label.Text = "Error: " + e.Message;
    return;
}
label.Text = "Success!";

在操作之前,标签文本未设置为“ Please Wait …”。

我使用另一个线程解决了这个问题,但是它变得繁琐,我想简化代码。


阅读 273

收藏
2020-05-19

共1个答案

一尘不染

最初,我想知道为什么OP尚未将其中一个答案标记为答案,但是在我自己尝试并且仍然无法正常工作之后,我更深入地挖掘了一下,发现这个问题还有很多,然后我首先应该。

通过阅读类似的问题可以获得更好的理解:为什么不控制中间过程的更新/刷新

最后,作为记录,我可以通过执行以下操作来更新标签:

private void SetStatus(string status) 
{
    lblStatus.Text = status;
    lblStatus.Invalidate();
    lblStatus.Update();
    lblStatus.Refresh();
    Application.DoEvents();
}

尽管从我的理解来看,这远远不是一种优雅而正确的方法。取决于线程的繁忙程度,这是一种可能有效或无效的技巧。

2020-05-19