在线程中显示一个窗口(多个UI线程)
2024-10-20 09:25:18
多数耗时操作可以异步执行,推荐async/await。
但和UI相关的部分仅能在UI线程执行,这时UI线程的耗时操作,导致界面卡死,不够友好。
我们可以创建一个单独的UI线程显示一个正在加载的窗口,可以在窗口显示一些动画之类的。
如果是WinForms那么很容易做到。
Application.Run(new LoadingForm());
WPF没有提供这样简单的方式,官方文档中有示例《多窗口、多线程》,官方例子 ExceptionHandlingSecondaryUIThread
经过简化后,十几行代码就可以实现。
private void 单独UI线程_Click(object sender, RoutedEventArgs e)
{
LoadingWindow loadingWindow = null;
var thread = new Thread(() =>
{
loadingWindow = new LoadingWindow();
loadingWindow.Show();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
耗时操作();
loadingWindow.Dispatcher.Invoke(() => loadingWindow.Close());
loadingWindow.Dispatcher.InvokeShutdown();
}
完整代码在我的 GitHub
最新文章
- jquery 监听常用监听方法
- 浅谈C语言中结构体的初始化
- 1014 : Trie树 hihocoder
- js-格式化数字保留两位小数-带千分符
- tornado 学习笔记2 Python web主流框架
- cmd实用命令
- Coding the Matrix (1):向量
- 每天一个linux命令(51):rcp命令
- 工作点滴积累(1)---MD5和编码
- C++ static_cast dynamic_cast reinterpret_cast const_cast转换
- iOS之多线程浅谈
- 下拉框点链接js
- 《JS权威指南学习总结--3.4null和undefined》
- Html 经典布局(三)
- 201521123008《Java程序设计》第10周学习总结
- find与tar的结合使用
- 《java入门第一季》之类(Scanner类)
- 菜鸟学IT之第一次作业
- spring boot集成aop实现日志记录
- javascript强大的日期函数
热门文章
- TypeScript引入moment.js报错“无法找到moment模块”及解决方法
- [ASP.NET Core 3框架揭秘] 文件系统[4]:程序集内嵌文件系统
- Cannot read property 'createElement' of undefined
- 分布式事务之解决方案(XA和2PC)
- Mac 安装nginx之后重启、停止、开启等操作
- 微信小程序—支付宝小程序与微信小程序的不同点对比
- Java多线程面试问答
- 报错解决 unable to unroll loop, loop does not appear to terminate in a timely manner (994 iterations) or unrolled loop is too large, use the [unroll(n)] attribute to force an exact higher number
- sql server中取交集、差集和并集的语法
- Consul初探-集成ocelot