WPF 通过线程使用ProcessBar
程序员文章站
2022-07-11 08:50:47
WPF下使用进度条也是非常方便的,如果直接采用循环然后给ProcessBar赋值,理论上是没有问题的,不过这样会卡主主UI线程,我们看到的效果等全部都结束循环后才出现最后的值。 所以需要采用线程或者后台方式给进度条赋值的方式,以下通过线程来触发事件触发的方式来实现给进度条赋值。这样就可以模拟我们在实 ......
wpf下使用进度条也是非常方便的,如果直接采用循环然后给processbar赋值,理论上是没有问题的,不过这样会卡主主ui线程,我们看到的效果等全部都结束循环后才出现最后的值。
所以需要采用线程或者后台方式给进度条赋值的方式,以下通过线程来触发事件触发的方式来实现给进度条赋值。这样就可以模拟我们在实际过程中处理数据的一种进度方式。
1 using system; 2 using system.collections.generic; 3 using system.linq; 4 using system.text; 5 using system.threading; 6 using system.threading.tasks; 7 using system.windows; 8 using system.windows.controls; 9 using system.windows.data; 10 using system.windows.documents; 11 using system.windows.input; 12 using system.windows.media; 13 using system.windows.media.imaging; 14 using system.windows.navigation; 15 using system.windows.shapes; 16 17 namespace wpftestprocessbar 18 { 19 /// <summary> 20 /// mainwindow.xaml 的交互逻辑 21 /// </summary> 22 public partial class mainwindow : window 23 { 24 public delegate void progressdelegate(int percent); 25 public mainwindow() 26 { 27 initializecomponent(); 28 progressevent += mainwindow_progressevent; 29 beginimport(); 30 } 31 void mainwindow_progressevent(int percent) 32 { 33 dispatcher.invoke(new action<system.windows.dependencyproperty, object>(pro.setvalue), system.windows.threading.dispatcherpriority.background, new object[] { progressbar.valueproperty, convert.todouble(percent+ 1) }); 34 dispatcher.invoke(new action<system.windows.dependencyproperty, object>(label.setvalue), system.windows.threading.dispatcherpriority.background, new object[] { label.contentproperty, convert.tostring((percent + 1)+"%") }); 35 36 } 37 private event progressdelegate progressevent; 38 private void beginimport() 39 { 40 pro.maximum = 100; 41 pro.value = 0; 42 label.content = "0%"; 43 threadpool.queueuserworkitem(state => 44 { 45 thread.sleep(2000); 46 for (int i = 0; i < 100; i++) 47 { 48 if (progressevent != null) 49 { 50 progressevent(i); 51 } 52 thread.sleep(10); 53 } 54 }); 55 } 56 } 57 }
以上只是一种实现方式,希望给有需要的人提供帮助。
效果如下:
推荐阅读
-
WPF通过线程使用ProcessBar的方法详解
-
C#中WPF使用多线程调用窗体组件的方法
-
WPF 通过线程使用ProcessBar
-
WPF何如在后台通过代码创建控件,如何使用资源样式
-
WPF通过线程使用ProcessBar的方法详解
-
C# WPF如何使用多线程
-
通过线程八锁问题融会贯通sychronized关键字的使用
-
10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用_html/css_WEB-ITnose
-
C# WPF 父控件通过使用可视化树找到子控件
-
C#中WPF使用多线程调用窗体组件的方法