wpf - 当调用非线程时,在 wpf 中显示 "Please wait"窗口的替代方法是什么

标签 wpf

最近我需要在wpf应用程序中实现请等待对话框。我发现下面的代码。它真的很好,但它总是在saprate线程中打开一个窗口并保持该位置。以下代码还有其他更改吗?而我的代码请求是非线程化的。

private void NewWindowThread<T,P>(Func<P, T> constructor, P param) where T : Window
{
Thread thread = new Thread(() =>
{
T w = constructor(param);
w.Show();
w.Closed += (sender, e) => w.Dispatcher.InvokeShutdown();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}

要调用上述方法,请使用以下行。其中加载窗口是您想要在对话框中显示的窗口(请稍候。windows)

   string t = "Please Wait…";
NewWindowThread<LoadingWindow, string>(c => new LoadingWindow(c), t);

最佳答案

阻塞 ui 线程从来都不是一个好主意,但它越来越是一个坏主意。

Windows 将告诉用户您的应用程序停止响应。这可能会促使他们强制您申请。如果渲染进度条,它们将失去动画效果,并且可能渲染不正确。在 WPF 中,GUI 动画将停止。

使用后台线程进行繁重的处理,如果您需要将数据写回到主线程使用的对象中,请将它们编码回 gui 线程。 BackgroundWorker 在那里很有用。

关于wpf - 当调用非线程时,在 wpf 中显示 "Please wait"窗口的替代方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802604/

相关文章:

c# - 绑定(bind)到来自两个不同 ViewModel 的两个属性的差异

WPF DataTrigger 与 .Net 属性

wpf - 将样式应用于 ListBoxItem 而不影响内部的 ComboboxItem

c# - UserControl 属性的默认值

wpf - 标题未显示在 WPF ListView 中

c# - 为 Canvas 上重叠的矩形触发 MouseDown 事件

c# - 任务栏中未显示客户应用程序图标 - 为什么?

sql-server - WPF C# : How to set Dynamic Connection String of SQL Server local database

c# - 使用按钮单击事件清除/删除文本框内容

java - Java Swing 中 JTable 对应的 WPF .NET 组件是什么?