Trong Watin của source code, có đoạn mã này:SetApartmentState và [STAThread]
public void NavigateToNoWait(Uri url)
{
var thread = new Thread(GoToNoWaitInternal);
thread.SetApartmentState(ApartmentState.STA);
thread.Start(url);
thread.Join(500);
}
[STAThread]
private void GoToNoWaitInternal(object uriIn)
{
var uri = (Uri)uriIn;
NavigateTo(uri);
}
Kể từ sợi tạo đã thiết lập tình trạng căn hộ của mình, tại sao là thuộc tính [STAThread]
bổ sung vào phương pháp này? Tôi không quan tâm đến đoạn mã cụ thể, nhưng tôi tự hỏi nếu có thuộc tính STAThread
là cần thiết.
Ghi chú:
- Phương pháp
GoToNoWaitInternal
không được sử dụng ở những nơi khác. - Toàn bộ dự án watin là về thao tác đối tượng WebBrowser (cửa sổ thám hiểm Internet nói chung). Vì vậy, chúng tôi đang thao tác một đối tượng COM.
Phải có lý do [Jeroen van Menen] (http://stackoverflow.com/users/52173/jeroen-van-menen) đã thêm nó – Odys
@odyodyodys Bạn sẽ phải hỏi anh ấy về điều đó. – svick
Lưu ý rằng 'STAThreadAttribute' chỉ có hiệu ứng' main() 'vì nó chỉ được sử dụng trong [ApplicationActivator.CreateInstance] (https://msdn.microsoft.com/en-us/library/ms146108%28v=vs.110%29. aspx), bạn có thể xem cách thuộc tính này được sử dụng trong [Nguồn tham chiếu] (https://referencesource.microsoft.com/#mscorlib/system/applicationactivator.cs,104) (trong phương thức 'nội bộ',' ApplicationActivator. ExecuteAsAssembly() ') – jrh