c# - How can I set the COM apartment state for code loaded with `AppDomain.ExecuteAssembly`? -
when create thread
, have option of setting com apartment state explicitly before start it. example:
// using system.threading; var thread = new thread(…); thread.setapartmentstate(apartmentstate.sta); thread.start();
but when create appdomain
, load code it, seem have no explicit control on thread creation, have no way of calling setapartmentstate
:
// using system; var pluginappdomain = appdomain.create("pluginappdomain"); pluginappdomain.executeassembly(@"plugin.dll");
is there way specify main/entry thread created inside appdomain
should use specific com apartment state?
i know plugin.dll
's main entry method marked [stathread]
or [mtathread]
attribute; let's assume plugin.dll
not explicitly declare or set com apartment state, , cannot change plugin.dll
.
i re-posting hans passant's comment above answer since answers of question:
"no, creating [app domain] not create thread. executing state of thread made
appdomain.create()
call. not enough, cannot uphold sta promise. you'll need more code in [app domain] take care of this, thread creation code ,application.run()
call needs operate in [app domain]."
Comments
Post a Comment