Programmering

Hvordan jobbe med tråder i C #

En tråd er den minste utførelsesenheten i en prosess. Multithreading er muligheten til å ha flere tråder i minnet til en gitt tid og bytte mellom dem for å håndtere flere operasjoner samtidig. Microsofts .Net Framework gir utmerket støtte for arbeid med tråder.

Programmeringstråder i C #

For å jobbe med tråder, bør du inkludere navneområdet System.Threading i applikasjonen. For å opprette en ny tråd, bør du utnytte ThreadStart-delegaten og sende referansen til en metode som skal utføres på tråden. Merk at en delegat er en typesikker funksjonspeker. Følgende kodebit viser hvordan du kan opprette et nytt trådobjekt ved hjelp av denne delegaten.

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

For å starte den nyopprettede tråden, bør du ringe Start-metoden på trådobjektet du har opprettet. Følgende kodeliste illustrerer dette. Merk at trådmetoden MyThreadMethod kjører på den nye tråden (kalt arbeidertråd) som er opprettet.

 statisk tomrom Main ()

        {

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

t.Start ();

Console.Read ();

        }

statisk tomrom MyThreadMethod ()

        {

Console.WriteLine (“Hello World!”);

        }

Vis trådtilstander i C #

En tråd i minnet kan være i forskjellige tilstander - Avbrutt, Bakgrunn, Kjører, Stoppet, Suspendert, Ikke startet, etc. Trådtilstander er definert i ThreadState-oppregningen som er tilgjengelig i System.Tråding-navneområdet. Med mindre Start-metoden kalles på en tråd, er tråden i tilstanden Ikke startet. Når Start-metoden påkalles på trådforekomsten, endres trådens tilstand fra Unstarted til Running.

Følgende kodebit viser hvordan du kan vise tilstanden til 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 ());

Kontroller forgrunns- og bakgrunnstråder i C #

Trådene kan kjøres enten i forgrunnen eller i bakgrunnen. Trådene du oppretter eksplisitt er tråder i forgrunnen. En av de største forskjellene mellom en forgrunns tråd og en bakgrunnstråd er at applikasjonen din bare lever så lenge en eller flere forgrunns tråder kjører. I hovedsak forhindrer tråder i forgrunnen applikasjonen å bli avsluttet. Derimot holder bakgrunnstråder ikke liv i Common Language Runtime-miljøet.

Du kan angi bakgrunnsstatus for en tråd ved hjelp av IsBackground-egenskapen. Her er et kodeeksempel som viser hvordan dette kan oppnås.

 statisk tomrom Main ()

        {

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

t.Start ();

t.IsBackground = sant;

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

Console.Read ();

        }

Du kan suspendere eller gjenoppta en tråd ved å påkalle metodene Suspend () og Resume () på trådobjektet. Merk at du bare kan gjenoppta en tråd som du tidligere har suspendert ved å ringe til Suspend () -metoden.

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

t.Start ();

t.Suspend (); // Suspenderer den nyopprettede tråden

t.Resume (); // Gjenopptar den hengende tråden

Det skal imidlertid bemerkes at metodene Thread.Suspend () og Thread.Resume () er avviklet. I stedet bør du bruke metodene AutoResetEvent og EventWaitHandle for å synkronisere aktiviteter som involverer tråder.

Sett trådprioritet i C #

Du kan kontrollere prioriteten til en tråd for å bestemme den relative andelen av prosessortiden som en tråd får sammenlignet med de andre trådene som ligger i minnet. Trådprioritet er definert i oppregningen av ThreadPriority. De mulige verdiene inkluderer: Lavest, UnderNormal, Normal, OverNormal og Høyest. Følgende kodebit illustrerer hvordan du kan angi trådprioriteringene til to tråder ved å bruke prioritetsegenskapen til trådobjektet.

 statisk tomrom Main ()

        {

Trådtråd1 = ny tråd (ny trådstart (metode1));

Trådtråd2 = ny tråd (ny trådstart (metode2));

thread1.Priority = ThreadPriority.Highest;

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 tomrom Metod2 ()

        {

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

            {

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

            }

        }

Når du utfører kodebiten ovenfor, vil du se at den første tråden fullfører kjøringen før den andre tråden, selv om den andre tråden ble startet før den første tråden i Main-metoden.

Trådene er dyre. De bruker mange ressurser i systemet ditt for initialisering, bytte av sammenheng og frigjøre ressursene de bruker. Derfor bør multitrading brukes med omhu og bare når det er nødvendig. Når du benytter deg av multithreading, er det alltid tilrådelig å utnytte trådbassenger for å opprette og administrere tråder på forespørsel og forbedre responsen til applikasjonen din.

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