c# - 当我的方法在后台 WPF 中执行某些操作时,如何打开窗口或其他内容

标签 c# wpf user-interface freeze

据我们所知, 程序正在逐行执行,现在我面临问题,我有一个需要几秒钟执行的方法, 我以为我可以通过线程来解决它,但我稍后会谈到它,现在我想做的是下一步:

当该方法开始执行并且方法完成时窗口可以自行关闭时,如何打开一个带有“仍在执行...”之类消息的窗口, 我需要它,因为我想避免 UI 卡住,因为那个长方法不在另一个任务/线程中。

它的样子是这样的:

if (e.Key == Key.Delete)
{
    //Could I show window here like like "Loading please wait.."
    ExecuteLongMethod();
    //When this is done close this method
}

谢谢大家, 干杯

最佳答案

如果由于某种原因您的 ExecuteLongMethod() 必须在调度程序线程上执行,您可以创建一个在单独线程中启动的新窗口,并在长时间运行期间显示该窗口。 -运行方法来完成。请参阅以下链接了解更多信息。

Wait screen during rendering UIElement in WPF

另一个选项是在后台线程上执行长时间运行的方法并在主线程上显示加载窗口。

建议的方法是使用任务并行库 (TPL) 并启动任务:https://msdn.microsoft.com/en-us/library/dd460717(v=vs.110).aspx

if (e.Key == Key.Delete)
{
    Window window = new Window();
    window.Show();

    Task.Factory.StartNew(() => ExecuteLongMethod())
    .ContinueWith(task => 
    {   
        window.Close();
    },System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
}

关于c# - 当我的方法在后台 WPF 中执行某些操作时,如何打开窗口或其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43117345/

相关文章:

c# - 将文件读入数组时出错

c# - 透明表单无法正确显示文本

c# - 在 C# 中使用正则表达式捕获字符串中的数值

cocoa - JavaScript 开发人员从 cocoa 等框架中寻找灵感

c# - Url.Action 和 Html.RenderActionLink 和 Html.RenderAction 之间的区别

wpf - 通过 DataBinding 在 UserControl 中设置自定义属性

wpf - 如何基于默认控件的样式创建样式?

wpf - 如何更改 GroupBox 的标题背景?

c++ - Qt 如何将自定义小部件添加到垂直布局以占用最少的垂直空间(自定义小部件之间没有空间)

html - <header> 和 <footer> 实际上是做什么的?