共用方式為


使用 Visual C# 建立線程

您可以在 Microsoft Visual C# .NET 或 Visual C# 中撰寫多線程應用程式。 本文說明簡單的 Visual C# 應用程式如何建立和管理線程。

原始產品版本: Visual C#
原始 KB 編號: 815804

需求

下列清單概述您需要的建議硬體、軟體、網路基礎結構和 Service Pack:

  • Windows 或 Windows Server
  • Visual C# .NET 或 Visual C#

本文假設您已熟悉下列主題:

  • Visual C# 程序設計
  • Visual Studio .NET 集成開發環境 (IDE) 或 Visual Studio IDE

本文參照 .NET Framework 類別庫命名空間 System.Threading

建立具有線程的 Visual C# 應用程式

  1. 啟動 Visual Studio .NET、Visual Studio 或 Visual C# Express Edition。

  2. 建立名為 ThreadWinApp 的新 Visual C# Windows 應用程式專案。

  3. 對表單新增 [按鈕] 控制項。 根據預設,按鈕的名稱為 Button1

  4. 將 ProgressBar 元件新增至表單。 根據預設,進度列的名稱為 ProgressBar1

  5. 以滑鼠右鍵按兩下窗體,然後按兩下 [ 檢視程式代碼]

  6. 將下列 語句新增至檔案的開頭:

    using System.Threading;
    
  7. 為 Button1 新增下列 button1_Click 事件處理程式:

    private void button1_Click(object sender, System.EventArgs e)
    {
        MessageBox.Show("This is the main thread");
    }
    
  8. 將下列變數新增至 Form1 類別:

    private Thread trd;
    
  9. 將下列方法新增至 Form1 類別:

    private void ThreadTask ()
    {
        int stp;
        int newval;
        Random rnd = new Random ();
    
        while (true)
        {
            stp = this.progressBar1.Step * rnd.Next (-1, 2);
            newval = this.progressBar1.Value + stp;
            if (newval > this.progressBar1.Maximum)
                newval = this.progressBar1.Maximum;
            else if (newval < this.progressBar1.Minimum)
                newval = this.progressBar1.Minimum;
            this.progressBar1.Value = newval;
            Thread.Sleep (100);
        }
    }
    

    注意事項

    這是線程的程序代碼。 此程式代碼是無限迴圈,會隨機遞增或遞減 ProgressBar1 中的值,然後等候 100 毫秒後再繼續。

  10. 為 Form1 新增下列 Form1_Load 事件處理程式。 此程式代碼會建立新的線程、讓線程成為背景線程,然後啟動線程。

    private void Form1_Load(object sender, System.EventArgs e)
    {
        Thread trd = new Thread(new ThreadStart(this.ThreadTask));
        trd.IsBackground = true;
        trd.Start();
    }
    

確認其運作正常

  1. 建置並執行應用程式。 請注意,ProgressBar1 中的值會隨機變更。 這是作業中的新線程。

  2. 若要示範主線程與變更 ProgressBar1 值的線程無關,請按兩下表單上的按鈕。 您會收到包含下列錯誤訊息的對話盒:

    這是主線程

等候輸入。 請注意,ProgressBar1 中的值會繼續變更。

疑難排解

在更複雜的應用程式中,請務必在存取共用變數時同步處理多個線程。 如需詳細資訊,請參閱Visual C# .NET 線上說明檔中的lock語句和相關主題。

參考資料

如需詳細資訊,請參閱 線程類別