国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

異步調用backgroudworker

2019-11-17 03:10:33
字體:
來源:轉載
供稿:網友

異步調用backgroudworker

先看一個小例子:C#客戶端打開一個控件,控件中加載了好多數據大約要用5秒中,如果我們直接打開控件,那么這個控件就要5秒中才能彈出來,當然這個時候用戶已經把他Kill了。這個時候我們就需要先給用戶把控件UI加載出來,給出來一個假象,然后數據在后臺加載就OK了。具體看一下怎么做。

 1         public Form1() 2         { 3             InitializeComponent(); 4  5             //如果要設置進度條和取消事件,則必須先設定他們的屬性可以執行 6             backgroundWorker1.WorkerReportsPRogress=true; 7             backgroundWorker1.WorkerSupportsCancellation=true; 8  9             //注冊要執行的耗時事件10             backgroundWorker1.DoWork += backgroundWorker1_DoWork;11             //注冊進度條事件12             backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;13             //注冊執行完backgroundworker事件14             backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted;16         } 17 18         /// <summary>19         /// 點擊開始20         /// </summary>21         /// <param name="sender"></param>22         /// <param name="e"></param>23         private void startAsyncButton_Click(object sender, EventArgs e)24         {25             //這里做判斷就是判斷backgroundWorker是否在執行,如果沒有在執行就開始工作,執行Dowork中的事件26             if (!backgroundWorker1.IsBusy)27             {28                 backgroundWorker1.RunWorkerAsync();29             }30         }31 32         /// <summary>33         /// 開始執行耗時事件34         /// </summary>35         /// <param name="sender"></param>36         /// <param name="e"></param>37         private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)38         {39             BackgroundWorker worker = sender as BackgroundWorker;40             for (int i = 1; i <= 10; i++)41             {42                 if (worker.CancellationPending)43                 {44                     e.Cancel = true;45                     break;46                 }47                 else48                 {49                     Thread.Sleep(500);50                     //更改進度條值,觸發進度條事件,這里不能實現UI代碼,要在進度條改變事件里實現51                     worker.ReportProgress(i * 10);52                 }53             }54         }55 56         /// <summary>57         /// 點擊取消執行事件58         /// </summary>59         /// <param name="sender"></param>60         /// <param name="e"></param>61         private void cancelAsyncButton_Click(object sender, EventArgs e)62         {63             if (backgroundWorker1.WorkerSupportsCancellation == true)64             {65                 // Cancel the asynchronous Operation.66                 backgroundWorker1.CancelAsync();67             }68         }69 70 71         /// <summary>72         /// 進度條改變事件73         /// </summary>74         /// <param name="sender"></param>75         /// <param name="e"></param>76         private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)77         {78             radLabel1.Text = (e.ProgressPercentage.ToString() + "%");79         }80 81         /// <summary>82         /// backgroundWorker1執行完事件83         /// </summary>84         /// <param name="sender"></param>85         /// <param name="e"></param>86      private void backgroundWorker1_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)87         {88         }89     }

具體代碼如下:

運行結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南溪县| 璧山县| 黄平县| 梁山县| 阜宁县| 奇台县| 公安县| 井陉县| 济宁市| 陆丰市| 新营市| 乌审旗| 双鸭山市| 宜昌市| 乌海市| 河津市| 新营市| 浦县| 枝江市| 营山县| 商丘市| 崇礼县| 洪江市| 张北县| 韶关市| 博白县| 云南省| 高唐县| 鄯善县| 宁安市| 荆州市| 博罗县| 蒙阴县| 郎溪县| 奉节县| 扎鲁特旗| 石柱| 万安县| 白河县| 焦作市| 镇远县|