CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 135

135

Chương 4: Tiểu trình, tiến trình, và sự đồng bộ

5.

5.

Th c thi ph

ng th c b ng ti u trình m i

ươ

ứ ằ

Th c thi ph

ng th c b ng ti u trình m i

ươ

ứ ằ

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ụ:

using System;

using System.Threading;

public class ThreadExample {

// Các biến giữ thông tin trạng thái.

private int iterations;

private string message;

private int delay;

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.