需要强制刷新WPF标签

时间:2011-05-20 21:49:07

标签: wpf asynchronous label

我正在对Web服务进行异步调用。由于可能需要几秒钟,因此使用状态标签让用户知道发生了什么。但即使呼叫是异步的,第一个呼叫似乎会阻塞几秒钟,状态标签需要很长时间才能更新。在WinForms中,我可以强制标签刷新(我认为使用Update())但不能在WPF中刷新。有什么超级简单的方法可以让它发挥作用吗?

谢谢, 格里

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

关于刷新控件的问题的一般答案......我一直依靠数据绑定来做到这一点。如果主UI线程卡住做某事,那将无济于事。如果UI线程卡住了,我不知道有什么方法可以让它绘制。

答案 2 :(得分:0)

没有办法告诉标签要刷新,这实际上会对你的情况起作用。如果UI被阻止,则不会刷新。基本上,当您实际到达更新标签文本的位置时,它将显示在WPF中。我能想到的唯一可能的例外是,如果你使用的是非WPF控件,但即使这样它也应该可以工作。

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

private void KickOffProcess()
{
   label1.Text = "Processing ...";  //This is where you need to move the label update code
   AsyncCall();
}
相关问题