Udostępnij za pośrednictwem


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

Aplikacje wielowątkowy można pisać na platformie Microsoft Visual C# .NET lub 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 wymagane dodatki Service Pack:

  • 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 projektowe (IDE) programu Visual Studio lub Visual Studio

W tym artykule odwołuje się do przestrzeni nazw System.Threadingbiblioteki klas programu .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 polecenie Wyświetl kod.

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

    using System.Threading;
    
  7. Dodaj następującą button1_Click procedurę 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ą do Form1 klasy:

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

    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 16.

    Jest to kod, który ujmuje wątek. Ten kod jest nieskończoną pętlą, która losowo zwiększa lub dekrementuje wartość w kodzie ProgressBar1, a następnie czeka 100 milisekund przed kontynuowaniem.

  10. Dodaj następującą Form1_Load procedurę 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 obszarze ProgressBar1 zmienia się losowo. Jest to nowy wątek w operacji.

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

    Jest to główny wątek

Zaczekaj na wejście. Zwróć uwagę, że wartość w obszarze ProgressBar1continues zmienia się.

Rozwiązywanie problemów

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

Informacje

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