.NET Framework線程詳細(xì)操作過程介紹
我們今天將會從這篇文章中詳細(xì)了解到有關(guān).NET Framework線程的具體操作方法。幫助大家提高對這一方面技巧的掌握。豐富的用戶體驗是所有交互式應(yīng)用程序的主要方面。需要用戶交互的軟件必須盡可能快地響應(yīng)用戶的活動。與此同時,應(yīng)用程序必須能夠處理數(shù)據(jù)以便將結(jié)果顯示給用戶。#t#
在應(yīng)用程序中使用多個線程可以將用戶界面 (UI) 執(zhí)行的任務(wù)與后臺執(zhí)行的任務(wù)分開。通過此方式組織任務(wù),可以由 UI 響應(yīng)用戶輸入,同時由后臺進(jìn)程進(jìn)行數(shù)據(jù)處理。
創(chuàng)建輔助型.NET Framework線程
應(yīng)用程序可以創(chuàng)建一個或多個線程以執(zhí)行方法。創(chuàng)建輔助(或從屬)線程的***個步驟是創(chuàng)建 ThreadStart 代理,指定要由該線程執(zhí)行的方法。然后將 ThreadStart 代理傳遞給 Thread 類的構(gòu)造函數(shù)。例如,要啟動新的線程并執(zhí)行 MyFunction 方法,請調(diào)用 Thread 類的 Start 方法,如下所示:
ThreadStart starter = new ThreadStart(MyFunction);
Thread t = new Thread(starter);
t.Start();
從輔助線程更新用戶界面
您可以使用 Control.Invoke 從 UI 線程以外的其他線程更新用戶界面 (UI)。此方法在 UI 線程上的控件線程上下文中執(zhí)行代理。.NET Framework 精簡版只支持 .NET Framework 完整版中的重載 Control.Invoke 方法。Control.Invoke 只使用一個參數(shù):一個指ㄔ?UI 線程上執(zhí)行哪個方法的代理。該代理的類型必須為 EventHandler,并且具有以下簽名:
void MyFunctionName(object sender, EventArgs e)
.NET Framework線程的處理中需要注意的一點(diǎn)是,如果要在輔助線程中更新 UI,就必須在代碼中調(diào)用 Application.DoEvents()。調(diào)用 Application.DoEvents() 可確保輔助線程激發(fā)的任何事件都由該 UI 線程處理。
下面的示例代碼說明如何創(chuàng)建輔助線程,然后從 UI 線程和輔助線程更新名為 listBox1 的 ListBox 控件:
- // 此變量將保留輔助線程設(shè)置的一些文本
 - public string Message = "";
 - // 創(chuàng)建輔助線程,然后將項目從 UI 線程添加到
 - // ListBox 中
 - public void DoThreading()
 - {
 - // 創(chuàng)建并啟動輔助線程
 - ThreadStart starter = new ThreadStart(this.UpdateListBox);
 - Thread t = new Thread(starter);
 - t.Start();
 - // 循環(huán) 4 次,每次都向 ListBox 中添加一條消息
 - for(int i = 0; i < 4; i++);
 - {
 - this.listBox1.Items.Add("來自 UI 線程的消息");
 - this.listBox1.Update();
 - // 處理 UI 線程中排隊的事件
 - Application.DoEvents();
 - // 將進(jìn)程掛起一秒鐘
 - Thread.Sleep(1000);
 - }
 - this.listBox1.Items.Add("來自 UI 線程的上一條消息");
 - this.listBox1.Update();
 - }
 - public void UpdateListBox()
 - {
 - for(int j = 0; j < 5; j++)
 - {
 - // 設(shè)置要從輔助線程添加到 ListBox 中的
 - // 消息
 - this.Message = "輔助線程的循環(huán)數(shù) = " + j.ToString();
 - // 在 ListBox 的線程上下文中調(diào)用 WorkerUpdate
 - // 方法
 - this.listBox1.Invoke(new EventHandler(WorkerUpdate));
 - Thread.Sleep(700);
 - }
 - }
 - // 為更新 ListBox 從輔助線程中
 - // 調(diào)用的代理
 - public void WorkerUpdate(object sender, EventArgs e)
 - {
 - this.listBox1.Items.Add(this.Message);
 - this.listBox1.Update();
 - }
 
要使用此代碼,請執(zhí)行以下操作:
.NET Framework線程使用 Windows 應(yīng)用程序模板創(chuàng)建新的智能設(shè)備應(yīng)用程序。將 ListBox 控件添加到 Windows 窗體中(默認(rèn)名稱為 listBox1)。將使用 System.Threading; 的語句添加到 Form1.cs 文件的頂部。將代碼粘貼到 Form1 類中。從 Form1 構(gòu)造函數(shù)中調(diào)用 DoThreading 方法。















 
 
 
 
 
 
 