成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

Microsoft .NET Framework 精簡版多線程提示

2010-08-28 10:50:27來源:西部e網作者:

適用于:
    Microsoft® .NET Framework 精簡版 1.0
    Microsoft Visual Studio® .NET 2003

摘要:了解如何通過 .NET Framework 精簡版在 Windows 窗體應用程序中使用多個線程。

簡介

豐富的用戶體驗是所有交互式應用程序的主要方面。需要用戶交互的軟件必須盡可能快地響應用戶的活動。與此同時,應用程序必須能夠處理數據以便將結果顯示給用戶。

在應用程序中使用多個線程可以將用戶界面 (UI) 執行的任務與后臺執行的任務分開。通過此方式組織任務,可以由 UI 響應用戶輸入,同時由后臺進程進行數據處理。

創建輔助線程

應用程序可以創建一個或多個線程以執行方法。創建輔助(或從屬)線程的第一個步驟是創建 ThreadStart 代理,指定要由該線程執行的方法。然后將 ThreadStart 代理傳遞給 Thread 類的構造函數。例如,要啟動新的線程并執行 MyFunction 方法,請調用 Thread 類的 Start 方法,如下所示:

ThreadStart starter = new ThreadStart(MyFunction);
Thread t = new Thread(starter);
t.Start();

從輔助線程更新用戶界面

您可以使用 Control.Invoke 從 UI 線程以外的其他線程更新用戶界面 (UI)。此方法在 UI 線程上的控件線程上下文中執行代理。.NET Framework 精簡版只支持 .NET Framework 完整版中的重載 Control.Invoke 方法。Control.Invoke 只使用一個參數:一個指定在 UI 線程上執行哪個方法的代理。該代理的類型必須為 EventHandler,并且具有以下簽名:

void MyFunctionName(object sender, EventArgs e)

需要注意的一點是,如果要在輔助線程中更新 UI,就必須在代碼中調用 Application.DoEvents()。調用 Application.DoEvents() 可確保輔助線程激發的任何事件都由該 UI 線程處理。

下面的示例代碼說明如何創建輔助線程,然后從 UI 線程和輔助線程更新名為 listBox1 的 ListBox 控件:

// 此變量將保留輔助線程設置的一些文本
public string Message = "";

// 創建輔助線程,然后將項目從 UI 線程添加到
// ListBox 中
public void DoThreading()
{
    // 創建并啟動輔助線程
    ThreadStart starter = new ThreadStart(this.UpdateListBox);
    Thread t = new Thread(starter);
    t.Start();

    // 循環 4 次,每次都向 ListBox 中添加一條消息
    for(int i = 0; i < 4; i++);
    {
        this.listBox1.Items.Add("來自 UI 線程的消息");
        this.listBox1.Update();
        // 處理 UI 線程中排隊的事件
        Application.DoEvents();
        // 將進程掛起一秒鐘
        Thread.Sleep(1000);
    }
    this.listBox1.Items.Add("來自 UI 線程的上一條消息");
    this.listBox1.Update();
}

public void UpdateListBox()
{
    for(int j = 0; j < 5; j++)
    {
        // 設置要從輔助線程添加到 ListBox 中的
        // 消息
        this.Message = "輔助線程的循環數 = " + j.ToString();
        // 在 ListBox 的線程上下文中調用 WorkerUpdate 
        // 方法
        this.listBox1.Invoke(new EventHandler(WorkerUpdate));
        Thread.Sleep(700);
    }
}
// 為更新 ListBox 從輔助線程中
// 調用的代理
public void WorkerUpdate(object sender, EventArgs e)
{
    this.listBox1.Items.Add(this.Message);
    this.listBox1.Update();
}

要使用此代碼,請執行以下操作:

  • 使用 Windows 應用程序模板創建新的智能設備應用程序。
  • 將 ListBox 控件添加到 Windows 窗體中(默認名稱為 listBox1)。
  • 將使用 System.Threading; 的語句添加到 Form1.cs 文件的頂部。
  • 將代碼粘貼到 Form1 類中。
  • 從 Form1 構造函數中調用 DoThreading 方法。
關鍵詞:dotnet
主站蜘蛛池模板: 宿州市| 陇西县| 三门峡市| 和平区| 镇安县| 杭州市| 芜湖市| 恩施市| 福鼎市| 松溪县| 碌曲县| 新密市| 襄垣县| 东辽县| 略阳县| 远安县| 临澧县| 大姚县| 银川市| 寿阳县| 德安县| 安吉县| 保定市| 房产| 峨眉山市| 会宁县| 峨眉山市| 苏州市| 清河县| 广宁县| 承德市| 平利县| 桦南县| 万安县| 永丰县| 中山市| 冕宁县| 台东市| 佛坪县| 页游| 剑川县|