創作內容

8 GP

C# 執行緒的使用

作者:貓貓風 ฅ●ω●ฅ│2016-12-27 22:27:35│巴幣:16│人氣:2142
.

















執行緒的主要目的就是可以同步處理許多程序,不會讓CPU為了等待或處理某項程序而卡住,造成資源的浪費甚至衍生其他問題
 
用法首先就是加入backgroundWorker 元件,然後選定要觸發的事件,主要分成三部分:
backgroundWorker_DoWork 定義執行緒內要做的事情
backgroundWorker_ProgressChanged定義執行時UI的變更
backgroundWorker_RunWorkerCompleted定義完成時要顯示的內容或動作
Example:
定義一個按鈕將要執行的動作給執行緒處理
int _file_count=0;
private void btnLoadData_Click(object sender, EventArgse)
{
     backgroundWorker1.RunWorkerAsync();//移到執行緒執行        
}
//定義執行緒要做的動作
private void backgroundWorker1_DoWork(object sender,DoWorkEventArgs e)
{
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
foreach (stringfname in System.IO.Directory.GetFileSystemEntries("d:\\sample"))
  {                 
    //調用ProgressChanged改變form元件數值 否則無法跨執行緒執行
    backgroundWorker1.ReportProgress(_file_count);
_file_count++;
  }
}
//檔要刷UI時調用此方法
private void backgroundWorker1_ProgressChanged(objectsender, ProgressChangedEventArgs e)
{
     progressBar1.Visible= true;
     // e.ProgressPercentage為剛剛傳入的參數
     progressBar1.Value= ((int)e.ProgressPercentage); //計算執行百分比
     //更新progressBar
    lb_progress_value.Text="載入完成率"+progressBar1.Value.ToString()+" %";
}
//當執行緒完成時
private voidbackgroundWorker1_RunWorkerCompleted_1(object sender,RunWorkerCompletedEventArgs e)
{
  if(_ok)
   {
          MessageBox.Show("載入完畢");  //顯示訊息
   }
         //隱藏progressBar
          progressBar1.Visible= false;
          lb_progress_value.Visible= false;
}


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=3428766
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:涼涼風

留言共 4 篇留言

鈤守&鈅狐
雖然有用過多執行緒~ OωO
不過感覺和我的不一樣呢~~~ >ω<
下次來試試看~ ^^
謝謝貓貓風的分享喔~~~ (・ω・)づ

12-27 22:35

貓貓風 ฅ●ω●ฅ
不客氣唷 感覺小空用的可能是 Tread 那也是執行緒唷12-27 22:36
鈤守&鈅狐
對耶~就是那個的樣子~~~ >ω<

12-27 22:38

貓貓風 ฅ●ω●ฅ
對呀XD 例如 Tread.Sleep(1000);12-27 22:44
鈤守&鈅狐
thMonitoring = new Thread(new ThreadStart(StartMonitoring));
thMonitoring.IsBackground = true;
thMonitoring.SetApartmentState(ApartmentState.STA);
thMonitoring.Start();
大概是這樣吧~~~ OωO

12-27 23:11

貓貓風 ฅ●ω●ฅ
對喔 這我看過XD 作TCP/IP好像也會用到OAO12-27 23:18
死者書生
BackgroundWorker聽工程師前輩說比較吃資源
不是合在一支程式裡面寫太多
要寫很多都會全部用Thread
不過BackgroundWorker似乎有設計安全結束的功能
比較不容易出錯的樣子

12-27 23:26

貓貓風 ฅ●ω●ฅ
了解 那我有空來研究THREAD的用法OAO12-27 23:28
我要留言提醒:您尚未登入,請先登入再留言

8喜歡★s1234567 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:C# 時間格式處理與取得... 後一篇:C# 整合應用01...

追蹤私訊切換新版閱覽

作品資料夾

happy545晚上好~
歡迎來我的小屋看看喔~~xd看更多我要大聲說昨天19:26


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】