ThreadStart:
Delegat ThreadStart definiowany jest jako void ThreadStart(), co oznacza, że metoda wykonywana nie może mieć parametrów. ThreadStart ThreadStart=nowy ThreadStart(Calculate); Wątek = nowy Wątek(wątkStart); wątek. Start(); public void Calculate() { podwójna średnica=0,5; Console.write("Obszar okręgu o średnicy {0} to {1}"Średnica, średnica*Math.PI); } Tutaj używamy delegata, który definiuje typ ThreadStart, który określa metodę, jaką wątek musi wykonać do wykonania: Calculate, w którym obliczany jest obwód okręgu o średnicy 0,5, i wyprowadza je. To jest najprostszy przykład wielowątkowości, który w wielu przypadkach wystarcza
ParametryWątekStart: ParameterThreadStart jest definiowany jako void ParametrizedThreadStart(stan obiektu), a funkcja startowa wątku zdefiniowanego za pomocą tego delegata może akceptować parametr wejściowy, na przykład:
ParametryzowanyWątekWątkStart=nowy ParametryzowanyWątkStart(Obliczaj) Wątek wątkowy=nowy wątek() ; wątek. Start(0,9); public void Calculate(object arg)
{ podwójna średnica=podwójna(arg); Console.write("Obszar okręgu o średnicy {0} to {1}"Średnica, średnica*Math.PI);
}
Metoda Calculate ma parametr typu obiekt, choć jest tylko jeden parametr, jest on również typem obiektu i nadal musi być konwertowany podczas jego użycia, ale na szczęście mogą istnieć parametry, a łącząc wiele parametrów w klasę, a następnie przekazując instancję tej klasy jako parametr, można uzyskać transfer wielu parametrów. Na przykład co:
klasa AddParams
{ publiczne int a, b;
public AddParams(int numb1, int numb2) { a = numb1; b = Numb2; }
} #endregion
Program klasowy
{ static void Main (string[] args) { Console.WriteLine("***** Dodawanie za pomocą obiektów wątków *****"); Console.WriteLine("ID wątku w Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = nowe AddParams(10, 10); Wątek t = nowy wątek(nowy parametryzowanyWątekStart(Dodaj)); t.Start(ap); Console.ReadLine(); }
#region Metoda dodawania statyczna pustka Dodaj (dane obiektu) { jeśli (dane to AddParams) { Console.WriteLine("ID wątku w Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion
}
} |