在线程中显示一个窗口(多个UI线程)
程序员文章站
2023-11-16 16:34:22
多数耗时操作可以异步执行,推荐async/await。 但和UI相关的部分仅能在UI线程执行,这时UI线程的耗时操作,导致界面卡死,不够友好。 我们可以创建一个单独的UI线程显示一个正在加载的窗口,可以在窗口显示一些动画之类的。 如果是WinForms那么很容易做到。 WPF没有提供这样简单的方式, ......
多数耗时操作可以异步执行,推荐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
推荐阅读
-
在线程中显示一个窗口(多个UI线程)
-
完美解决UI-Grid表格元素中多个空格显示为一个空格的问题
-
Android在非UI线程中显示Toast
-
Excel2010的多个窗口怎么同时在一个界面中独立显示
-
在同一个类中,线程资源竞争
-
【Android学习笔记(二十八)】:在子线程中修改UI界面
-
在WinForm和WPF中,利用Func,Action,Predicate进行线程UI交互
-
C#在主线程中、UI线程中进行sleep而不希望界面失去响应、不希望子线程也被阻塞的办法
-
C#在主线程中、UI线程中进行sleep而不希望界面失去响应、不希望子线程也被阻塞的办法
-
10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用_html/css_WEB-ITnose