2009-08-18 33 views

Trả lời

32

Đây là yêu cầu của Windows nhiều hơn WPF và quay trở lại thiết kế ban đầu của biểu mẫu và điều khiển Windows, từ trước .NET.

STAThread đề cập đến "Single-Threaded Apartments" đề cập đến mô hình luồng được sử dụng bởi chuỗi hiện tại (chính). Mô hình luồng trong sử dụng quyết định cách các ứng dụng .NET và COM khác sẽ nói chuyện với ứng dụng của bạn (và vốn dĩ là các chủ đề của nó). Mô hình ứng dụng đơn luồng yêu cầu không có một đối tượng đơn lẻ nào "sống trong" nhiều hơn một chuỗi STA tại một thời điểm, câu mô hình luồng MTA; và cho phép chuyển các con trỏ tới dữ liệu trên toàn bộ các căn hộ chỉ qua marshalling-as-object.

Về cơ bản, với khai báo [STAThread], các ứng dụng khác sẽ biết chính sách của chuỗi của bạn là gì khi gửi dữ liệu cho bạn. Mô hình STA là mô hình luồng phổ biến nhất cho các chủ đề/ứng dụng Windows; nhưng đôi khi bạn sẽ gặp một số mã sẽ không chạy nếu được gọi từ một chuỗi được mô hình hóa STA, bởi vì nó được thiết kế để gửi/nhận dữ liệu qua các ranh giới chuỗi theo cách không tuân thủ các hạn chế STA. Biết trước mô hình căn hộ của một luồng cho phép IDE bắt các ngoại lệ này vào thời gian biên dịch thay vì nhận các lỗi vi phạm truy cập khó chịu khi bạn cố gắng sử dụng một đối tượng trên các ranh giới thread trong suốt thời gian chạy.

Bạn có thể đọc về STA và đề MTA từ bài viết MSDN tại địa chỉ: http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx

Lưu ý rằng các ứng dụng .NET thậm chí bình thường (từ trước WPF) yêu cầu [STAThread] khai trên đỉnh của main().

4

Có một câu trả lời tuyệt vời cho điều này trong blog entry này.

Trích dẫn từ blog:

Khi STAThreadAttribute là áp dụng, nó thay đổi trạng thái căn hộ của thread hiện hành là đơn ren. Nếu không tham gia vào một cuộc thảo luận lớn về COM và luồng, thuộc tính này đảm bảo cơ chế truyền thông giữa các chủ đề hiện tại và các chủ đề khác có thể muốn nói chuyện với nó qua COM. Khi bạn đang sử dụng Biểu mẫu Windows, tùy thuộc vào trên tính năng bạn đang sử dụng, có thể là bằng cách sử dụng chế độ tương tác COM để giao tiếp với hệ điều hành thành phần. Ví dụ tốt về điều này là Clipboard và Hộp thoại Tệp.

Biểu mẫu Windows không được hỗ trợ trong phạm vi MTA hoặc căn hộ có ren miễn phí. Ứng dụng sử dụng Windows Forms phải luôn luôn khai báo kiểu căn hộ mà chúng đang sử dụng vì một số thành phần khác có thể khởi tạo trạng thái căn hộ không đúng.

+0

nếu nó không "quá phức tạp" đối với người mới bắt đầu .. thì bạn không cần phải ..Tôi thích đọc :) –

+2

Nó vẫn còn tốt đẹp để có một bản tóm tắt ở đây trên SO cho mục đích tham khảo, và nếu blog nói đi offline, bài viết bị xóa, Microsoft đốt cháy trong một quả bóng của địa ngục, vv –

Các vấn đề liên quan