Jawaban:
Pada STAThreadAttribute
dasarnya adalah persyaratan untuk pompa pesan Windows untuk berkomunikasi dengan komponen COM. Meskipun inti Windows Forms tidak menggunakan COM, banyak komponen OS seperti dialog sistem menggunakan teknologi ini.
MSDN menjelaskan alasannya dengan sedikit lebih detail:
STAThreadAttribute menunjukkan bahwa model threading COM untuk aplikasi adalah apartemen single-threaded. Atribut ini harus ada pada titik masuk aplikasi apa pun yang menggunakan Formulir Windows; jika dihilangkan, komponen Windows mungkin tidak berfungsi dengan benar. Jika atribut tidak ada, aplikasi menggunakan model apartemen multithreaded, yang tidak didukung untuk Formulir Windows.
Posting blog ini ( Mengapa diperlukan STAThread? ) Juga menjelaskan persyaratan dengan cukup baik. Jika Anda ingin tampilan yang lebih mendalam tentang bagaimana model threading bekerja di tingkat CLR, lihat artikel Majalah MSDN ini dari Juni 2004 (Archived, April 2009).
Ini memberitahu kompiler bahwa Anda berada dalam model Apartemen Single Thread. Ini adalah hal COM yang jahat, biasanya digunakan untuk Windows Forms (GUI) karena menggunakan Win32 untuk menggambarnya, yang diimplementasikan sebagai STA. Jika Anda menggunakan sesuatu yang model STA dari beberapa utas maka Anda mendapatkan objek yang rusak.
Inilah sebabnya mengapa Anda harus memohon ke Gui dari utas lain (jika Anda telah melakukan pengkodean formulir apa pun).
Pada dasarnya jangan khawatir, terima saja bahwa utas Windows GUI harus ditandai sebagai STA jika tidak, hal-hal aneh terjadi.
STAThreadAttribute menandai utas untuk menggunakan Apartemen COM Single-Threaded jika COM diperlukan. Secara default, .NET tidak akan menginisialisasi COM sama sekali. Hanya ketika COM diperlukan, seperti ketika objek COM atau Kontrol COM dibuat atau ketika tarik 'n' drop diperlukan, COM diinisialisasi. Ketika itu terjadi.
Baca info lebih lanjut di sini (Diarsipkan, Juni 2009)
dan
[STAThread]
?