? Bạn muốn thực thi mã lệnh trong một tiểu trình riêng, và muốn kiểm soát hoàn toàn quá trình thực thi và trạng thái của tiểu trình đó.
» Khai báo một phương thức trả về void và không có đối số. Sau đó, tạo một thể hiện ủy nhiệm System.Threading.ThreadStart tham chiếu đến phương thức này. Tiếp theo, tạo một đối tượng System.Threading.Thread mới, và truyền thể hiện ủy nhiệm cho phương thức khởi dựng của nó. Kế đến, gọi phương thức Thread.Start để bắt đầu thực thi phương thức của bạn.
Để tăng độ linh hoạt và mức độ kiểm soát khi hiện thực các ứng dụng hỗ-trợ-đa-tiểu-trình, bạn phải trực tiếp tạo và quản lý các tiểu trình. Đây là cách tiếp cận phức tạp nhất trong việc lập trình hỗ-trợ-đa-tiểu-trình, nhưng đó cũng là cách duy nhất vượt qua những hạn chế cố hữu trong các cách tiếp cận sử dụng các tiểu trình trong thread-pool, như đã được thảo luận trong bốn mục trước. Lớp Thread cung cấp một cơ chế mà qua đó bạn có thể tạo và kiểm soát các tiểu trình. Để tạo và chạy một tiểu trình mới, bạn hãy tiến hành theo các bước sau:
1. Tạo một đối tượng ủy nhiệm ThreadStart tham chiếu đến phương thức chứa mã lệnh mà bạn muốn dùng một tiểu trình mới để chạy nó. Giống như các ủy nhiệm khác, ThreadStart có thể tham chiếu đến một phương thức tĩnh hay phương thức của một đối tượng. Phương thức được tham chiếu phải trả về void và không có đối số.
2. Tạo một đối tượng Thread, và truyền thể hiện ủy nhiệm ThreadStart cho phương thức khởi dựng của nó. Tiểu trình mới có trạng thái ban đầu là Unstarted (một thành viên thuộc kiểu liệt kê System.Threading.ThreadState).
3. Gọi thực thi phương thức Start của đối tượng Thread để chuyển trạng thái của nó sang ThreadState.Running và bắt đầu thực thi phương thức được tham chiếu bởi thể hiện ủy nhiệm ThreadStart (nếu bạn gọi phương thức Start quá một lần, nó sẽ ném ngoại lệ System.Threading.ThreadStateException).
Vì ủy nhiệm ThreadStart khai báo không có đối số, bạn không thể truyền dữ liệu trực tiếp cho phương thức được tham chiếu. Để truyền dữ liệu cho tiểu trình mới, bạn phải cấu hình dữ liệu là khả truy xuất đối với mã lệnh đang chạy trong tiểu trình mới. Cách tiếp cận thông thường là tạo một lớp đóng gói cả dữ liệu cần cho tiểu trình và phương thức được thực thi bởi tiểu trình. Khi muốn chạy một tiểu trình mới, bạn hãy tạo một đối tượng của lớp này, cấu hình trạng thái cho nó, và rồi chạy tiểu trình. Dưới đây là một ví dụ:

Visual C# Code:
  1. using System;
  2. using System.Threading;
  3.  
  4. public class ThreadExample {
  5.  
  6.     // Các biến giữ thông tin trạng thái.
  7.     private int iterations;
  8.     private string message;
  9.     private int delay;
  10.  
  11.     public ThreadExample(int iterations, string message, int delay) {
  12.  
  13.         this.iterations = iterations;
  14.         this.message = message;
  15.         this.delay = delay;
  16.     }
  17.  
  18.     public void Start() {
  19.  
  20.         // Tạo một thể hiện ủy nhiệm ThreadStart
  21.         // tham chiếu đến DisplayMessage.
  22.         ThreadStart method = new ThreadStart(this.DisplayMessage);
  23.  
  24.         // Tạo một đối tượng Thread và truyền thể hiện ủy nhiệm
  25.         // ThreadStart cho phương thức khởi dựng của nó.
  26.         Thread thread = new Thread(method);
  27.  
  28.         Console.WriteLine("{0} : Starting new thread.",  
  29.             DateTime.Now.ToString("HH:mm:ss.ffff"));
  30.  
  31.         // Khởi chạy tiểu trình mới.
  32.         thread.Start();
  33.     }
  34.  
  35.     private void DisplayMessage() {
  36.  
  37.         // Hiển thị thông báo ra cửa sổ Console với số lần
  38.         // được chỉ định (iterations), nghỉ giữa mỗi thông báo
  39.         // một khoảng thời gian được chỉ định (delay).
  40.         for (int count = 0; count < iterations; count++) {
  41.  
  42.             Console.WriteLine("{0} : {1}",  
  43.                 DateTime.Now.ToString("HH:mm:ss.ffff"), message);
  44.  
  45.             Thread.Sleep(delay);
  46.         }
  47.     }
  48.  
  49.     public static void Main() {
  50.  
  51.         // Tạo một đối tượng ThreadExample.
  52.         ThreadExample example =
  53.             new ThreadExample(5, "A thread example.", 500);
  54.  
  55.         // Khởi chạy đối tượng ThreadExample.
  56.         example.Start();
  57.  
  58.         // Tiếp tục thực hiện công việc khác.
  59.         for (int count = 0; count < 13; count++) {
  60.             Console.WriteLine("{0} : Continue processing...",
  61.                 DateTime.Now.ToString("HH:mm:ss.ffff"));
  62.             Thread.Sleep(200);
  63.         }
  64.  
  65.         // Nhấn Enter để kết thúc.
  66.         Console.WriteLine("Main method complete. Press Enter.");
  67.         Console.ReadLine();
  68.     }
  69. }

Trích từ "Các giải pháp lập trình C#"