Programmering

Sådan arbejder du med tråde i C #

En tråd er den mindste eksekveringsenhed inden for en proces. Multithreading er evnen til at have flere tråde i hukommelsen på et givet tidspunkt og skifte mellem dem til at håndtere flere operationer på samme tid. Microsofts .Net Framework giver fremragende support til at arbejde med tråde.

Programmeringstråde i C #

For at arbejde med tråde skal du inkludere navneområdet System.Threading i din applikation. For at oprette en ny tråd skal du udnytte ThreadStart-delegaten og videregive henvisningen til en metode, der skal udføres på tråden. Bemærk, at en delegeret er en typesikker funktionsmarkør. Følgende kodestykke viser, hvordan du kan oprette et nyt trådobjekt ved hjælp af denne delegerede.

 Tråd t = ny tråd (ny trådstart (MyThreadMethod)); 

For at starte den nyoprettede tråd skal du kalde Start-metoden på det trådobjekt, du har oprettet. Følgende kodeliste illustrerer dette. Bemærk, at trådmetoden MyThreadMethod udfører på den nye tråd (kaldet en arbejdstråd), der er oprettet.

 statisk tomrum Main ()

        {

Tråd t = ny tråd (ny trådstart (MyThreadMethod));

t.Start ();

Console.Read ();

        }

statisk hulrum MyThreadMethod ()

        {

Console.WriteLine (“Hello World!”);

        }

Vis trådtilstande i C #

En tråd i hukommelsen kan være i forskellige tilstande - Afbrudt, Baggrund, Kørsel, Stoppet, Suspenderet, Ikke startet osv. Trådtilstande defineres i ThreadState-optællingen, der er tilgængelig i System.Trådens navneområde. Medmindre Start-metoden kaldes på en tråd, er tråden i tilstanden Ikke startet. Når startmetoden påberåbes på trådforekomsten, ændres trådens tilstand fra Unstarted til Running.

Følgende kodestykke viser, hvordan du kan vise tilstanden for en tråd i konsollen.

 Tråd t = ny tråd (ny trådstart (MyThreadMethod));

t.Start ();

Console.WriteLine (“Trådens tilstand er:“ + t.ThreadState.ToString ());

Styr forgrunds- og baggrundstråde i C #

Tråde kan køre enten i forgrunden eller i baggrunden. De tråde, du opretter eksplicit, er tråde i forgrunden. En af de største forskelle mellem en forgrundstråd og en baggrundstråd er, at din applikation kun lever, så længe en eller flere forgrundstråde kører. I bund og grund forhindrer forgrundstråde, at applikationen afsluttes. I modsætning hertil holder baggrundstråde ikke miljøet i Common Language Runtime i live.

Du kan indstille baggrundsstatus for en tråd ved hjælp af IsBackground-ejendommen. Her er et kodeeksempel, der viser, hvordan dette kan opnås.

 statisk tomrum Main ()

        {

Tråd t = ny tråd (ny trådstart (MyThreadMethod));

t.Start ();

t.IsBackground = sandt;

Console.WriteLine (“Trådens baggrundsstatus er:“ + t.IsBackground.ToString ());

Console.Read ();

        }

Du kan suspendere eller genoptage en tråd ved at påkalde metoderne Suspend () og CV () på thread-objektet. Bemærk, at du kun kan genoptage en tråd, som du tidligere har suspenderet ved at foretage et opkald til Suspend () -metoden.

 Tråd t = ny tråd (ny trådstart (MyThreadMethod));

t.Start ();

t.Suspend (); // Suspenderer den nyoprettede tråd

t.Resume (); // Genoptager den hængende tråd

Det skal dog bemærkes, at metoderne Thread.Suspend () og Thread.Resume () er udfaset. I stedet skal du bruge metoderne AutoResetEvent og EventWaitHandle til at synkronisere aktiviteter, der involverer tråde.

Indstil trådprioritet i C #

Du kan styre en tråds prioritet for at bestemme den relative andel af processortiden, som en tråd får sammenlignet med de andre tråde, der er i hukommelsen. Trådprioritet er defineret i ThreadPriority-optællingen. De mulige værdier inkluderer: Laveste, UnderNormale, Normal, OverNormale og Højeste. Følgende kodestykke illustrerer, hvordan du kan indstille trådprioriteterne for to tråde ved hjælp af trådeobjektets prioritetsegenskab.

 statisk tomrum Main ()

        {

Tråd tråd1 = ny tråd (ny trådStart (metode1));

Tråd tråd2 = ny tråd (ny trådstart (metode 2));

thread1.Priority = ThreadPriority.Højeste;

thread2.Priority = ThreadPriority.Lowest;

tråd2.Start ();

tråd 1.Start ();

Console.Read ();

        }

statisk ugyldig Metode1 ()

        {

for (int i = 0; i <10; i ++)

            {

Console.WriteLine (“Første tråd:“ ​​+ i);

            }

        }

statisk ugyldig Metode2 ()

        {

for (int i = 0; i <10; i ++)

            {

Console.WriteLine (“Andet tråd:“ ​​+ i);

            }

        }

Når du udfører ovenstående kodestykke, vil du se, at den første tråd fuldender sin udførelse foran den anden tråd, selvom den anden tråd blev startet før den første tråd i Main-metoden.

Tråde er dyre. De bruger mange ressourcer i dit system til initialisering, skift af sammenhæng og frigivelse af de ressourcer, de bruger. Derfor bør multithreading bruges med omtanke og kun når det er nødvendigt. Når du benytter dig af multithreading, anbefales det altid at udnytte trådpuljer til at oprette og administrere tråde efter behov og forbedre lydhørheden i din applikation.

$config[zx-auto] not found$config[zx-overlay] not found