WPF UI线程状态

时间:2010-02-23 14:21:52

标签: wpf multithreading user-interface

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

感谢。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分: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;
    }

干杯 安东

答案 3 :(得分:0)

如果使用绑定将UI与可能需要很长时间才能返回的数据源绑定,则可以在绑定上设置“IsAsync = True”,以使绑定变为异步。

如果你想在加载数据源的过程中显示一些其他数据(我猜是动画),你可以使用PriorityBinding

HTH

Riana