2010-02-23 416 views
3

我有一个wpf应用程序需要大约30秒来创建地图/图形。我已经读过,没有简单的方法可以绑定到UI渲染线程以获得进度更新。所以我打算在一个值转换器上使用一个计数器来为我的地图着色,但也是在UI线程上,所以我的问题是有没有人发现任何使用渲染线程的流畅方法呢?WPF UI线程状态

谢谢。

回答

3

您可以在BackgroundWorker中创建地图/图形,该图允许您在函数中调用ReportProgress,您可以在其中设置完成百分比并提高ProgressChanged事件以更新UI。

+0

同意在另一个线程+ 1。 – Anvaka 2010-02-23 15:12:32

+1

对不起,我忘了提及我正在使用绑定在XAML中生成我的地图/图形。纠正我,如果我错了,但在这种情况下,我不能使用后台工作人员,因为地图呈现在隐藏的渲染线程正确? – Nathan 2010-02-23 16:49:23

0

当你说UI渲染线程,你的意思是从WPF内部或UI线程隐藏渲染线程?

在任何情况下,有一个单独的线程构建您的地图并通知UI有关进度不会帮助您?

0

即时通讯不知道这是你在找什么。

我使用类似于下面的代码来加载大约300个图像(大约200 MB),并没有任何UI放慢。 (用户可以看到每个图像被加载,我只是保留一个空的占位符图像,直到最后的图像加载)

图像加载在后台线程,然后调用函数实际将它们放入WPF场景。

这是一个使用文本框的简单示例。你可以从任何线程调用这个函数,如果它需要改变到GUI线程,它就会解决。 (对于我的项目,当然,我正在使用位图,而不是文本框)。

delegate void UpdateUIThreadDelegate(String str); 

    public void DisplayString(String strMessage) 
    { 
      if (this.InvokeRequired) 
      { 
       UpdateUIThreadDelegate updateDelegate = DisplayString; 

       this.BeginInvoke(updateDelegate, strMessage); 

       return; 
      } 

      myTextBox.Text = strMessage; 
    } 

干杯 安东

0

如果使用绑定一个数据源这可能需要很长时间才能返回,以配合您的用户界面,你可以设置你的绑定“IsAsync =真”,这样的结合成为异步。

如果你想在你的数据源加载的时间显示一些其他DATAS(甚至动画我猜的),你可以使用一个PriorityBinding

HTH

Riana