我有一个wpf应用程序需要大约30秒来创建地图/图形。我已经读过,没有简单的方法可以绑定到UI渲染线程以获得进度更新。所以我打算在一个值转换器上使用一个计数器来为我的地图着色,但也是在UI线程上,所以我的问题是有没有人发现任何使用渲染线程的流畅方法呢?WPF UI线程状态
谢谢。
我有一个wpf应用程序需要大约30秒来创建地图/图形。我已经读过,没有简单的方法可以绑定到UI渲染线程以获得进度更新。所以我打算在一个值转换器上使用一个计数器来为我的地图着色,但也是在UI线程上,所以我的问题是有没有人发现任何使用渲染线程的流畅方法呢?WPF UI线程状态
谢谢。
您可以在BackgroundWorker中创建地图/图形,该图允许您在函数中调用ReportProgress,您可以在其中设置完成百分比并提高ProgressChanged事件以更新UI。
当你说UI渲染线程,你的意思是从WPF内部或UI线程隐藏渲染线程?
在任何情况下,有一个单独的线程构建您的地图并通知UI有关进度不会帮助您?
即时通讯不知道这是你在找什么。
我使用类似于下面的代码来加载大约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;
}
干杯 安东
如果使用绑定一个数据源这可能需要很长时间才能返回,以配合您的用户界面,你可以设置你的绑定“IsAsync =真”,这样的结合成为异步。
如果你想在你的数据源加载的时间显示一些其他DATAS(甚至动画我猜的),你可以使用一个PriorityBinding
HTH
Riana
同意在另一个线程+ 1。 – Anvaka 2010-02-23 15:12:32
对不起,我忘了提及我正在使用绑定在XAML中生成我的地图/图形。纠正我,如果我错了,但在这种情况下,我不能使用后台工作人员,因为地图呈现在隐藏的渲染线程正确? – Nathan 2010-02-23 16:49:23