国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - c#中Winform實現多線程異步更新UI(進度及狀態信息)

c#中Winform實現多線程異步更新UI(進度及狀態信息)

2021-12-27 14:49msay C#

本篇文章主要介紹了c#中Winform實現多線程異步更新UI(進度及狀態信息) ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

引言

在進行winform程序開發需要進行大量的數據的讀寫操作的時候,往往會需要一定的時間,然在這個時間段里面,界面ui得不到更新,導致在用戶看來界面處于假死的狀態,造成了不好的用戶體驗。所以在大量數據操作的應用上,需要使用多線程來處理這種情況。在c#中使用多線程很方便只需要使用system.threading.thread的一個實例的start方法就行了,但是如何實現多線程之間的交互就不是那么簡單。本文實現了用子線程去處理數據,并實時更新主線程的ui狀態了。下面就開始一步步的去實現異步線程更新ui的demo程序吧。

應用背景

寫入一定量的數據到文本文件中,同時需要在主界面中反應出寫入數據的實時進度情況。要求:需要將寫入數據封裝成一個類。

實現過程

1、首先建立一個winform項目,在主窗體上拖入一個button,一個progressbar,一個lable。如下圖所示。

c#中Winform實現多線程異步更新UI(進度及狀態信息)

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);

然后編寫多線程去啟動寫入數據的方法以及回調的函數。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private void btnwrite_click(object sender, eventargs e)
{
 int taskcount = 10000; //任務量為10000
 this.pgbwrite.maximum = taskcount;
 this.pgbwrite.value = 0;
 
 datawrite datawrite = new datawrite();//實例化一個寫入數據的類
 datawrite.updateuidelegate += updatauistatus;//綁定更新任務狀態的委托
 datawrite.taskcallback += accomplish;//綁定完成任務要調用的委托
 
 thread thread = new thread(new parameterizedthreadstart(datawrite.write));
 thread.isbackground = true;
 thread.start(taskcount);
}
 
//更新ui
private void updatauistatus(int step)
{
 if (invokerequired)
 {
  this.invoke(new asynupdateui(delegate(int s)
  {
   this.pgbwrite.value += s;
   this.lblwritestatus.text = this.pgbwrite.value.tostring() + "/" + this.pgbwrite.maximum.tostring();
  }), step);
 }
 else
 {
  this.pgbwrite.value += step;
  this.lblwritestatus.text = this.pgbwrite.value.tostring() + "/" + this.pgbwrite.maximum.tostring();
 }
}
 
//完成任務時需要調用
private void accomplish()
{
 //還可以進行其他的一些完任務完成之后的邏輯處理
 messagebox.show("任務完成");
}

效果如下:

c#中Winform實現多線程異步更新UI(進度及狀態信息)

總結

實現異步更新ui有很多種方法,但是我認為這種方式是比較靈活,能實時的獲取到任務進行的狀態,并且對之進行相應的處理。這種模式還適用于使用多個線程同時寫入不同的數據到不同的文件中去。

源代碼下載地址:winform.rar

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/mingjiatang/p/5079632.html

延伸 · 閱讀

精彩推薦
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
主站蜘蛛池模板: 日韩在线区 | 欧美国产在线视频 | 欧美成人精品一区二区 | 永久黄网站色视频免费 | 亚洲天堂免费在线 | 国产欧美精品在线 | 黄色片免费观看网站 | 免费视频一区二区 | 国产精品一区二区不卡 | 亚洲一区二区三区四区五区午夜 | 亚洲国产精品网站 | 国产高清视频一区 | 韩国av一区二区 | 日韩国产免费观看 | 国产黄色一级片视频 | 欧美成人精品一区二区三区在线看 | 成人午夜在线视频 | 久久久久久久国产 | 精品乱子伦一区二区三区 | 成人午夜视频在线观看 | 日韩欧美一区二区三区免费观看 | 亚洲婷婷综合网 | 欧美黄色一区二区 | 国产精品久久久久久久久久免费看 | 毛片免费在线播放 | 国产中文字幕观看 | 在线久草 | 亚洲精品不卡 | 人人人人澡人人爽人人澡 | 精品欧美乱码久久久久久1区2区 | 国产精品高潮呻吟久久av野狼 | 亚洲第一福利视频 | 99re在线| 高清视频一区 | 亚洲午夜免费视频 | 欧美精品区 | 欧洲成人午夜免费大片 | 国产精品999| 日本伊人久久 | 91午夜理伦私人影院 | 国产一区二区精品在线观看 |