Dari artikel MSDN di STAThread:
Menunjukkan bahwa model penguliran COM untuk aplikasi adalah apartemen berulir tunggal (STA).
(Untuk referensi, itulah keseluruhan artikel .)
Apartemen berulir tunggal ... Oke, itu terlintas di kepalaku. Juga, saya membaca bahwa kecuali aplikasi Anda menggunakan interop COM, atribut ini sebenarnya tidak melakukan apa-apa. Jadi apa sebenarnya fungsinya, dan bagaimana pengaruhnya terhadap aplikasi multithread? Haruskah aplikasi multithread (yang mencakup apa saja dari siapa saja yang menggunakan Timer
s hingga pemanggilan metode asinkron, bukan hanya threadpool dan sejenisnya) menggunakan MTAThread, bahkan jika itu 'hanya untuk aman'? Apa sebenarnya yang dilakukan STAThread dan MTAThread?
sumber
Apa yang dilakukannya itu memastikan yang
CoInitialize
disebut menentukan COINIT_APARTMENTTHREADED sebagai parameter. Jika Anda tidak menggunakan komponen COM atau kontrol ActiveX, itu tidak akan berpengaruh sama sekali pada Anda. Jika Anda melakukannya maka itu agak penting.Kontrol yang berulir apartemen secara efektif berulir tunggal, panggilan yang dilakukan hanya dapat diproses di apartemen tempat mereka dibuat.
Beberapa detail lebih lanjut dari MSDN:
sumber
CoInitialize()
MenanggapiSTAThread
atribut /ApartmentState
? Catatan: Artikel di MSDN ada di sini: Fungsi CoInitializeEx .CoInitialize()
internal? Saya menelusuri Atribut STAThread sampai ke bawah tetapi jejaknya menjadi dingin (saya tidak dapat menemukan sumbernyaThread::SetApartment
). Apakah kelas Thread dari thread.h (COM thread.h) didokumentasikan di mana saja? Apakah itu MFC, ATL, atau yang lainnya?STAThread ditulis sebelum fungsi Utama dari Proyek C # GUI. Itu tidak melakukan apa-apa selain memungkinkan program untuk membuat satu utas.
sumber