Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 19083|Odpoveď: 0

[Zdroj] ThreadStart a ParameterizedThreadStart sú odlišné

[Kopírovať odkaz]
Zverejnené 14. 11. 2016 10:25:44 | | |
ThreadStart:

Delegát ThreadStart je definovaný ako void ThreadStart(), čo znamená, že vykonaná metóda nemôže mať parametre.
ThreadStart threadStart=new ThreadStart(Calculate);
Vlákno = nové Vlákno(threadStart);
Vlákno. Start();
public void Calculate()
   {
dvojitý priemer=0,5;
Console.write("Plocha kruhu s priemerom {0} je {1}"Diameter, Diameter*Math.PI);
   }
       Tu používame delegáta, ktorý definuje typ ThreadStart, ktorý definuje metódu, ktorú vlákno potrebuje na vykonanie: Calculate, pri ktorom sa vypočíta obvod kruhu s priemerom 0,5, a výstup. Toto predstavuje najjednoduchší príklad multithreadingu, ktorý je v mnohých prípadoch postačujúci




ParameterThreadStart:
ParameterThreadStart je definovaný ako void ParameterizedThreadStart(stav objektu) a štartovacia funkcia vlákna definovaného pomocou tohto delegáta môže prijať vstupný parameter, napríklad:



ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate)
Vlákno = nové Vlákno() ;
Vlákno. Štart (0,9);
public void Calculate(object arg)
{
dvojitý priemer=dvojnásobok(arg);
Console.write("Plocha kruhu s priemerom {0} je {1}"Diameter, Diameter*Math.PI);
}

Metóda Calculate má parameter typu objekt, hoci existuje len jeden parameter, a je to tiež typ objektu, a stále ho treba pri jeho použití konvertovať, ale našťastie môžu existovať parametre, a kombinovaním viacerých parametrov do triedy a následným odovzdaním inštancie tejto triedy ako parametra môžete dosiahnuť prenos viacerých parametrov. Napríklad čo:





trieda AddParams
{
    verejné int a, b;

    public AddParams(int numb1, int numb2)
    {
      a = numb1;
      b = numb2;
    }
}
#endregion

Triedny program
{
    static void Main (string[] args)
    {
      Console.WriteLine("***** Sčítanie pomocou objektov Thread *****");
      Console.WriteLine("ID vlákna v Main(): {0}",
        Thread.CurrentThread.ManagedThreadId);

      AddParams ap = nové AddParams(10, 10);
      Vlákno t = nové vlákno (nové parametrizovanéVláknoŠtart(Add));
      t.Start(ap);
      Console.ReadLine();
    }

    #region Metóda pridania
    statická prázdnota Pridať (dáta objektu)
    {
      ak (dáta sú AddParams)
      {
        Console.WriteLine("ID vlákna v Main(): {0}",
          Thread.CurrentThread.ManagedThreadId);

        AddParams ap = (AddParams)data;
        Console.WriteLine("{0} + {1} is {2}",
          ap.a, ap.b, ap.a + ap.b);
      }
    }
    #endregion
}
}




Predchádzajúci:.net/c# Prehľadávať používateľské avatary, sťahovať QQ avatary
Budúci:.net/c# vypočíta vek vodičovho auta
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com