详情介绍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#读取xml多级子节点

C#开发之winform(公共控件)

C#开发实例-订制屏幕截图工具(一)功能概览(图)

C#实现base64处理的加密解密,编码解码的示例代码

C#使用反射来实现对象的深度复制的示例代码分享

详解C#获取本机ip地址(ipv4)的代码案例

详细介绍asp.net中的C#基础知识

详解介绍C#是如何获取文件md5与sha1

C#使用autoresetevent实现同步的详解及实例

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




打赏

取消

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

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

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

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

评论

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