在 UI 线程中进行计算时的进度窗口 [英] Progress window when doing computation in the UI thread
本文介绍了在 UI 线程中进行计算时的进度窗口的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想实现这一目标:
- 创建一个新窗口,它只是一个旋转加载器和一些静态文本,并显示它.
- 在 UI 线程上做一些计算(必须在那里完成)
- 关闭加载器窗口
目前,当我在加载器窗口上调用 .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屋!
查看全文