详情介绍c#中Winform实现多线程异步更新UI的示例代码


本文摘自PHP中文网,作者黄舟,侵删。

本篇文章主要介绍了c#中Winform实现多线程异步更新UI(进度及状态信息) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

引言

在进行Winform程序开发需要进行大量的数据的读写操作的时候,往往会需要一定的时间,然在这个时间段里面,界面ui得不到更新,导致在用户看来界面处于假死的状态,造成了不好的用户体验。所以在大量数据操作的应用上,需要使用多线程来处理这种情况。在c#中使用多线程很方便只需要使用System.Threading.Thread的一个实例的Start方法就行了,但是如何实现多线程之间的交互就不是那么简单。本文实现了用子线程去处理数据,并实时更新主线程的ui状态了。下面就开始一步步的去实现异步线程更新ui的demo程序吧。

应用背景

写入一定量的数据到文本文件中,同时需要在主界面中反应出写入数据的实时进度情况。要求:需要将写入数据封装成一个类。

实现过程

1、首先建立一个winform项目,在主窗体上拖入一个button,一个progressbar,一个lable。如下图所示。

2、编写一个处理数据的类(WriteDate),源代码如下。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

public class DataWrite

{

 public delegate void UpdateUI(int step);//声明一个更新主线程的委托

 public UpdateUI UpdateUIDelegate;

 

 public delegate void AccomplishTask();//声明一个在完成任务时通知主线程的委托

 public AccomplishTask TaskCallBack;

  

 public void Write(object lineCount)

 {

  StreamWriter writeIO = new StreamWriter("text.txt", false, Encoding.GetEncoding("gb2312"));

  string head = "编号,省,市";

  writeIO.Write(head);

  for (int i = 0; i < (int)lineCount; i++)

  {

   writeIO.WriteLine(i.ToString() + ",湖南,衡阳");

   //写入一条数据,调用更新主线程ui状态的委托

   UpdateUIDelegate(1);

  }

  //任务完成时通知主线程作出相应的处理

  TaskCallBack();

  writeIO.Close();

 }

}

3、主界面中的代码如下:

首先要建立一个委托来实现非创建控件的线程更新控件。

1

delegate void AsynUpdateUI(int step);

然后编写多线程去启动写入数据的方法以及回调的函数。

阅读剩余部分

相关阅读 >>

简单介绍C#中list<t>对象的深度拷贝问题

实现C#listview点击列头排序的示例代码分享

实现C#中图片.byte[]和base64string的转换方法的详解

详解kotlin中如何实现类似java或C#中的静态方法

关于C#中string类型的方法分享

C# 日志记录类创建的源码分享

C# winform程序上传图片到指定目录的示例代码

c#cs与bs数据请求交换

C#新建datacolumn类时type类型参数的生成方式的示例代码详解

C#动态对象dynamic实现方法和属性动态代码详解

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...