Từ bài viết MSDN trên STAThread:STAThread và đa luồng
Chỉ ra rằng mô hình luồng COM cho một ứng dụng là đơn luồng căn hộ (STA).
(Để tham khảo, đó là the entire article.)
Single-ren căn hộ ... OK, đó đã đi qua đầu tôi. Ngoài ra, tôi đọc ở đâu đó trừ khi ứng dụng của bạn sử dụng COM interop, thuộc tính này thực sự không làm gì cả. Vậy chính xác nó sẽ làm gì và nó ảnh hưởng như thế nào đến các ứng dụng đa luồng? Nên các ứng dụng đa luồng (bao gồm bất kỳ thứ gì từ bất kỳ ai sử dụng Timer
s đến các cuộc gọi phương thức không đồng bộ, không chỉ các luồng và các loại tương tự) sử dụng MTAThread, ngay cả khi nó 'vừa an toàn'? STAThread và MTAThread thực sự làm gì?
Điều đó là đơn giản. Các đối tượng đa luồng có thể chạy trong bất kỳ chuỗi nào. Một đối tượng có thể chỉ chạy trong căn hộ mà chúng được tạo ra. –
Một cuộc gọi từ một đối tượng STA trên một chuỗi STA, đến một đối tượng MTA, sẽ sắp xếp lại thành một chuỗi MTA (trừ khi đối tượng MTA thực hiện trình gỡ rối chuỗi miễn phí) . Như tôi đã nói, các chi tiết có thể trở nên phức tạp. (Tôi đã làm việc trên nhóm COM trong một số năm * cười *) – Bruce
Đôi khi bạn cần phải nhận thức được điều này ngay cả khi bạn không sử dụng COM trực tiếp. Chủ đề phải sử dụng mô hình Căn hộ đơn luồng nếu nó hiển thị bất kỳ cửa sổ đồ họa nào. Đây là lý do tại sao [STAThread] luôn hiển thị ở trên cùng của phương thức chính trong một ứng dụng biểu mẫu windows. –