蔡妟佑,彪悍少年国语,激浪烟雾弹
多数耗时操作可以异步执行,推荐async/await。
但和ui相关的部分仅能在ui线程执行,这时ui线程的耗时操作,导致界面卡死,不够友好。
我们可以创建一个单独的ui线程显示一个正在加载的窗口,可以在窗口显示一些动画之类的。
如果是winforms那么很容易做到。
application.run(new loadingform());
wpf没有提供这样简单的方式,官方文档中有示例,官方例子 exceptionhandlingsecondaryuithread
经过简化后,十几行代码就可以实现。
1 private void 单独ui线程_click(object sender, routedeventargs e) 2 { 3 loadingwindow loadingwindow = null; 4 var thread = new thread(() => 5 { 6 loadingwindow = new loadingwindow(); 7 loadingwindow.show(); 8 system.windows.threading.dispatcher.run(); 9 }); 10 thread.setapartmentstate(apartmentstate.sta); 11 thread.start(); 12 耗时操作(); 13 loadingwindow.dispatcher.invoke(() => loadingwindow.close()); 14 loadingwindow.dispatcher.invokeshutdown(); 15 }
完整代码在我的 github
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论