Vra

Ek leer C # 3,5 en ek wil weet wat [STAThread] doen in ons programme?

Was dit nuttig?

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

Hoekom is STAThread nodig?

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top