Tworzenie wątku przy użyciu języka Visual C#

Aplikacje wielowątkowe można pisać w programie Microsoft Visual C# .NET lub w języku Visual C#. W tym artykule opisano, jak prosta aplikacja języka Visual C# może tworzyć wątki i zarządzać nimi.

Oryginalna wersja produktu: Visual C#
Oryginalny numer KB: 815804

Wymagania

Na poniższej liście przedstawiono zalecany sprzęt, oprogramowanie, infrastrukturę sieciową i dodatki Service Pack, których potrzebujesz:

  • Windows lub Windows Server
  • Visual C# .NET lub Visual C#

W tym artykule założono, że znasz następujące tematy:

  • Programowanie w języku Visual C#
  • Zintegrowane środowisko programistyczne programu Visual Studio (IDE) lub środowisko IDE programu Visual Studio

Ten artykuł odnosi się do przestrzeni System.Threadingnazw biblioteki klas .NET Framework .

Tworzenie aplikacji Visual C# z wątkami

  1. Uruchom program Visual Studio .NET, Visual Studio lub Visual C# Express Edition.

  2. Utwórz nowy projekt aplikacji systemu Windows w języku Visual C# o nazwie ThreadWinApp.

  3. Dodaj kontrolkę Przycisk do formularza. Domyślnie przycisk ma nazwę Button1.

  4. Dodaj składnik ProgressBar do formularza. Domyślnie pasek postępu ma nazwę ProgressBar1.

  5. Kliknij prawym przyciskiem myszy formularz, a następnie kliknij pozycję Wyświetl kod.

  6. Dodaj następującą instrukcję na początku pliku:

    using System.Threading;
    
  7. Dodaj następujący button1_Click program obsługi zdarzeń dla przycisku Button1:

    private void button1_Click(object sender, System.EventArgs e)
    {
        MessageBox.Show("This is the main thread");
    }
    
  8. Dodaj następującą zmienną Form1 do klasy:

    private Thread trd;
    
  9. Dodaj następującą metodę do Form1 klasy:

    private void ThreadTask ()
    {
        int stp;
        int newval;
        Random rnd = new Random ();
    
        while (true)
        {
            stp = this.progressBar1.Step * rnd.Next (-1, 2);
            newval = this.progressBar1.Value + stp;
            if (newval > this.progressBar1.Maximum)
                newval = this.progressBar1.Maximum;
            else if (newval < this.progressBar1.Minimum)
                newval = this.progressBar1.Minimum;
            this.progressBar1.Value = newval;
            Thread.Sleep (100);
        }
    }
    

    Uwaga

    Jest to kod, który stanowi podstawę wątku. Ten kod jest nieskończoną pętlą, która losowo zwiększa lub dekrementuje wartość w pasku ProgressBar1, a następnie czeka 100 milisekund, zanim będzie kontynuowana.

  10. Dodaj następujący Form1_Load program obsługi zdarzeń dla formularza Form1. Ten kod tworzy nowy wątek, tworzy wątek w tle, a następnie uruchamia wątek.

    private void Form1_Load(object sender, System.EventArgs e)
    {
        Thread trd = new Thread(new ThreadStart(this.ThreadTask));
        trd.IsBackground = true;
        trd.Start();
    }
    

Sprawdź, czy działa

  1. Skompiluj i uruchom aplikację. Zwróć uwagę, że wartość w pasku Postępu1 zmienia się losowo. Jest to nowy wątek w działaniu.

  2. Aby pokazać, że główny wątek jest niezależny od wątku, który zmienia wartość paska ProgressBar1, kliknij przycisk w formularzu. Zostanie wyświetlone okno dialogowe z następującym komunikatem o błędzie:

    Jest to główny wątek

Poczekaj na dane wejściowe. Zwróć uwagę, że wartość w obszarze ProgressBar1kontynuuje zmianę.

Rozwiązywanie problemów

W bardziej złożonych aplikacjach upewnij się, że synchronizujesz wiele wątków podczas uzyskiwania dostępu do zmiennych udostępnionych. Aby uzyskać więcej informacji, zobacz instrukcję blokady i powiązane tematy w dokumentacji pomocy online platformy .NET języka Visual C#.

Informacje

Aby uzyskać więcej informacji, zobacz Klasa wątków.