首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从UI线程强制GUI更新

从UI线程强制GUI更新
EN

Stack Overflow用户
提问于 2009-09-01 15:00:57
回答 8查看 132.4K关注 0票数 74

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

我所做的大致是:

代码语言:javascript
复制
label.Text = "Please Wait..."
try 
{
    SomewhatLongRunningOperation(); 
}
catch(Exception e)
{
    label.Text = "Error: " + e.Message;
    return;
}
label.Text = "Success!";

标签文本未设置为“请稍候...”在手术前。

我为操作使用了另一个线程来解决这个问题,但是它变得复杂了,我想简化代码。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-04-03 03:25:13

起初,我想知道为什么OP还没有将其中一个响应标记为答案,但在我自己尝试它仍然不起作用后,我更深入地挖掘了一下,发现这个问题比我最初想象的要多得多。

通过阅读类似的问题可以获得更好的理解:Why won't control update/refresh mid-process

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

代码语言:javascript
复制
private void SetStatus(string status) 
{
    lblStatus.Text = status;
    lblStatus.Invalidate();
    lblStatus.Update();
    lblStatus.Refresh();
    Application.DoEvents();
}

尽管据我所知,这远不是一种优雅和正确的方法。这是一种黑客攻击,它可能会工作,也可能不会工作,这取决于线程的繁忙程度。

票数 107
EN

Stack Overflow用户

发布于 2009-09-01 07:07:30

在设置标签后调用Application.DoEvents(),但您应该在单独的线程中执行所有工作,以便用户可以关闭窗口。

票数 17
EN

Stack Overflow用户

发布于 2018-11-29 04:44:34

如果您只需要更新几个控件,那么.update()就足够了。

代码语言:javascript
复制
btnMyButton.BackColor=Color.Green; // it eventually turned green, after a delay
btnMyButton.Update(); // after I added this, it turned green quickly
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1360944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档