首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要强制在WPF标签上刷新

问需要强制在WPF标签上刷新
EN

Stack Overflow用户
提问于 2011-05-20 21:49:06
回答 3查看 550关注 0票数 1

我正在对web服务进行异步调用。因为可能需要几秒钟,所以有一个状态标签可以让用户知道发生了什么。但是,即使调用是异步的,第一个调用似乎会阻塞几秒钟,状态标签需要很长时间才能更新。在WinForms中,我可以强制标签刷新(我认为使用更新()),但在WPF中没有。有什么超简单的方法让这件事成功吗?

谢谢,格里

EN

回答 3

Stack Overflow用户

发布于 2011-05-20 22:16:46

您可以将整个调用逻辑移动到QueueWorkUserItem或BackgroundWorker块中。这样,第一个代理初始化就不会阻塞UIThread (在异步之前)。开始/结束模式开始)。假设您正在使用数据绑定对象,公开绑定到已实现的INotifyPropertyChanged标签的属性,那么一切都应该自动发生。

票数 1
EN

Stack Overflow用户

发布于 2011-05-20 21:59:56

我(疯狂地)猜测阻塞是由于创建/初始化服务代理类造成的。如果是这样,您可以尝试更早地创建代理,或者在另一个线程中调用异步web服务。

你关于刷新控件的问题的一般答案是..。我一直依赖于数据绑定来做到这一点。不过,如果主UI线程被卡在执行某些操作时,这将于事无补。如果UI线程被卡住了,我不知道是否有任何方法可以让它绘制。

票数 0
EN

Stack Overflow用户

发布于 2011-05-21 00:15:00

没有一种方法可以让标签刷新,这在您的情况下是可行的。如果UI被阻塞,它将不会刷新。基本上,当您实际达到更新标签文本的程度时,它将显示在WPF中。我能想到的唯一可能的例外是,如果您使用的是非WPF控件,但即使这样,它也应该能工作。

我的建议是在执行第一个操作之前更新标签(甚至在变量初始化之前,因为这可能是实际问题所在)。以下是我所指的伪代码示例(以防万一我还不清楚):

代码语言:javascript
复制
private void KickOffProcess()
{
   label1.Text = "Processing ...";  //This is where you need to move the label update code
   AsyncCall();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6077898

复制
相关文章

相似问题

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