Multithreading: Erstellen von Threads

Um einen Thread zu erstellen, müssen wir ein Objekt der Klasse Thread erzeugen. Der Konstruktor erwartet als Parameter einen Delegat des Typs ThreadStart. Ein Delegat (Mehrzahl Delegaten) kennzeichnet sich durch das Schlüsselwort delegate und stellt einen Prototyp einer Funktion dar. Delegaten kommen in Form von Funktionszeigern vor, welche eine Art Referenz auf eine Funktion darstellt. Delegaten werden unter anderem bei Events verwendet. Dem ThreadStart-Konstruktor wird als Parameter die Funktion, welche in einem neuen Thread arbeiten soll, übergeben. Die Funktion wird dabei nicht mit runden Klammern notiert, da die Funktion nicht aufgerufen werden soll, sondern die Referenz der Funktion übergeben werden soll. Natürlich arbeiten auch alle Funktionen, die von der „Start-Funktion“ (welche dem ThreadStart-Konstruktor übergeben wird) aufgerufen werden in dem neu erstellen Thread. Die Start-Funktion besitzt keine Übergabeparameter und darf keinen Rückgabewert haben. Mit der statischen Funktion Sleep() können wir den Thread, von welchem die Programmzeile ausgeführt wurde, für die übergebene Zahl an Millisekunden anhalten. Mit der Funktion Abort() können wir einen Thread abbrechen. Dabei wird der Programmcode, der im Thread aktuell ausgeführt wird, sofort beendet.

Program.cs

using System;
using System.Threading;

namespace CSV20.Mehrere_Threads
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread oThreadGroßbuchstaben = new Thread(new ThreadStart(ThreadGroßbuchstaben));
            Thread oThreadKleinbuchstaben = new Thread(new ThreadStart(ThreadKleinbuchstaben));

            oThreadGroßbuchstaben.Start();
            oThreadKleinbuchstaben.Start();

            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(i + 1);
                // Beim 3. Durchlauf Klein-Buchstaben-Thread abbrechen
                if (i == 2)
                    oThreadKleinbuchstaben.Abort();
                Thread.Sleep(250);
            }

            Console.ReadKey();
        }

        private static void ThreadGroßbuchstaben()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine((char)('A' + i));
                Thread.Sleep(250);
            }
        }

        private static void ThreadKleinbuchstaben()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine((char)('a' + i));
                Thread.Sleep(250);
            }
        }
    }
}
Download

LinksRechts