在 UI 线程中进行计算时的进度窗口 [英] Progress window when doing computation in the UI thread

查看:26
本文介绍了在 UI 线程中进行计算时的进度窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现这一目标:

  1. 创建一个新窗口,它只是一个旋转加载器和一些静态文本,并显示它.
  2. 在 UI 线程上做一些计算(必须在那里完成)
  3. 关闭加载器窗口

目前,当我在加载器窗口上调用 .Show() 时,它根本没有加载,它只是作为一个空白窗口挂出(UI 线程被阻塞,我不想要)

Currently, when I call .Show() on the loader window, it doesnt load at all, it just hangs out as a blank window (the UI thread is blocked, which I dont want)

如何让加载器窗口在计算完成的同时显示其内容?

What can I do to enable the loader window to display its contents at the same time my computation is done?

private void CopyToClipboard(object sender, RoutedEventArgs e)
    {
        var selected = mDataGrid.SelectedItem;
        var selectedIndex = mDataGrid.SelectedIndex;
        var progressWindow = mProgressDialog.Create(this,"Copying data to clipboard");
        progressWindow.Show();
        try
        {

            mDataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            mDataGrid.SelectionMode = DataGridSelectionMode.Extended;
            mDataGrid.SelectAllCells();  // SLOW !!!!
            ApplicationCommands.Copy.Execute(null, mDataGrid); //SLOW !!!!
        }
        catch (Exception ex)
        {
            mLog.Error("Copying to clipboard", ex);
            MessageBox.Show("Error while copying to clipboard");
        }
        finally
        {
            mDataGrid.SelectionMode = DataGridSelectionMode.Single;
            mDataGrid.UnselectAllCells();
            this.Select(selectedIndex, selected);
            progressWindow.Close();
        }
    }

推荐答案

我唯一能做到的是:

progressWindow.Show();
this.DoEvents();


public static void DoEvents(this Window _)
    {
        Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
                                              new Action(delegate { }));
    }

加载程序窗口"至少会显示出来,因此用户知道发生了一些事情.它通常持续不到一秒钟,所以这个解决方案对我来说是可以接受的.

The "loader window" gets at least displayed, so the user knows something is happening. It usually lasts under a second, so this solution is acceptable to me.

这篇关于在 UI 线程中进行计算时的进度窗口的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆