Wat beteken [STAThread] doen?
-
20-09-2019 - |
Vra
Ek leer C # 3,5 en ek wil weet wat [STAThread]
doen in ons programme?
Oplossing
Die STAThreadAttribute
is in wese 'n vereiste vir die Windows boodskap pomp om te kommunikeer met COM-komponente. Hoewel kern Windows Vorms nie COM gebruik nie, baie komponente van die bedryfstelsel soos stelsel vensters doen gebruik hierdie tegnologie.
MSDN verduidelik die rede in 'n bietjie meer detail:
STAThreadAttribute dui daarop dat die COM threading model vir die aansoek is enkel-threaded woonstel. Hierdie kenmerk moet wees teenwoordig op die inskrywing punt van enige program wat Windows Vorms gebruik; indien dit weggelaat, die Windows komponente kan nie korrek werk nie. As die kenmerk is nie teenwoordig is, die toepassing maak gebruik van die gewilde woonstel model, wat nie ondersteun vir Windows Vorms.
Hierdie blog post ( Hoekom is STAThread nodig? ) verduidelik ook die vereiste baie goed. As jy 'n meer in-diepte siening wil oor hoe die threading model werk by die CLR vlak, sien hierdie artikel MSDN Magazine van Junie 2004 (Archived, April 2009).
Ander wenke
Dit vertel die samesteller dat jy in 'n enkele onderwerp woonstel model. Dit is 'n bose COM ding, is dit gewoonlik gebruik vir Windows Vorms (GUI's) as wat gebruik Win32 vir sy tekening, wat geïmplementeer as STA. As jy met behulp van iets wat STA model van verskeie drade dan kry jy beskadig voorwerpe.
Dit is die rede waarom jy moet roep op die Gui van 'n ander draad (as jy enige vorm kodering gedoen het).
Eintlik moenie bekommerd wees oor dit, aanvaar net dat Windows GUI drade as STA moet gemerk anders vreemde dinge gebeur.
Die STAThreadAttribute punte 'n draad om die gebruik Enkellopend-threaded COM Woonstel as COM nodig. deur standaard, NET sal nie inisialiseer COM by almal. Dit is net vir COM nodig is, soos wanneer 'n COM voorwerp of COM beheer geskep of wanneer sleep 'n 'drop is nodig, is dat COM geïnisialiseer. Wanneer dit gebeur, NET noem die onderliggende CoInitializeEx funksie, wat neem 'n Vlag wat aandui of om die draad aan te sluit om 'n multi-threaded of enkel-threaded woonstel.
Lees meer info hier (Archived, Junie 2009)
en