从Windows 7中的其他线程更新进度条

时间:2014-10-20 08:41:35

标签: c# wpf progress-bar dispatcher

我正在尝试更新包含标签和进度条的对话框。实际上在我的应用程序中,我正在取回我的数据,在进行备份时,我想显示进度条和显示当前正在备份的标签。我使用这个

来调用进度
Application.Current.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle, (Action)(() => { dialog.ProgressbarValue = "Backing up first item"; })); 

这在Windows 8上运行正常,但在Windows 7上没有任何更新。

2 个答案:

答案 0 :(得分:1)

您需要在文本框中应用“刷新”,以便在循环运行时显示所有文本。

您需要为ExtensionMethods提供一个包含刷新例程的静态类。

public static class ExtensionMethods
    {
        private static Action EmptyDelegate = delegate() { };

        public static void Refresh(this UIElement uiElement)
        {
            uiElement.Dispatcher.Invoke(DispatcherPriority.Render, EmptyDelegate);
        }
    }

每次设置dialog.ProgressbarValue后,从代码中调用此extentionMethod 注意:你不需要在这个逻辑简单集对话框中有Dispatcher.ProgressbarValue代码并使用dialog.Refresh();

调用上面的刷新方法

答案 1 :(得分:0)

设置DispatcherPriority.ApplicationIdle实际修复了问题