详情介绍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);

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

阅读剩余部分

相关阅读 >>

详细介绍使用msscriptcontrol在C#中读取json数据的方法

C#基于正则表达式如何删除字符串中数字或非数字的方法详解

详细概述C#中的常用字符串方法

具体介绍C#编程获取ip地址的方法

C#网络编程的图文代码详解

C#兼容各大浏览器的文件下载实例详解

C#实现windows剪贴板监视器的代码具体介绍

关于C#中三个关键字params,ref,out的详细介绍

C#实现复制和深度复制的方法详解

C#学习之面向对象如何调用类以及普通方法、静态方法的使用

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




打赏

取消

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

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

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

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

评论

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