Visual C# gebruiken om een thread te maken
U kunt multithreaded toepassingen schrijven in Microsoft Visual C# .NET of in Visual C#. In dit artikel wordt beschreven hoe een eenvoudige Visual C#-toepassing threads kan maken en beheren.
Oorspronkelijke productversie: Visual C#
Oorspronkelijk KB-nummer: 815804
Behoeften
De volgende lijst bevat een overzicht van de aanbevolen hardware, software, netwerkinfrastructuur en servicepacks die u nodig hebt:
- Windows of Windows Server
- Visual C# .NET of Visual C#
In dit artikel wordt ervan uitgegaan dat u bekend bent met de volgende onderwerpen:
- Visual C#-programmering
- Visual Studio .NET Integrated Development Environment (IDE) of Visual Studio IDE
Dit artikel verwijst naar de .NET Framework Class Library-naamruimte System.Threading
.
Een Visual C#-toepassing maken met threads
Start Visual Studio .NET, Visual Studio of Visual C# Express Edition.
Maak een nieuw Visual C# Windows-toepassingsproject met de naam ThreadWinApp.
Voeg een knopbesturingselement toe aan het formulier. De knop heeft standaard de naam Button1.
Voeg een ProgressBar-onderdeel toe aan het formulier. De voortgangsbalk heet standaard ProgressBar1.
Klik met de rechtermuisknop op het formulier en klik vervolgens op Code weergeven.
Voeg de volgende instructie toe aan het begin van het bestand:
using System.Threading;
Voeg de volgende
button1_Click
gebeurtenis-handler toe voor Button1:private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show("This is the main thread"); }
Voeg de volgende variabele toe aan de
Form1
klasse:private Thread trd;
Voeg de volgende methode toe aan de klasse
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); } }
Notitie
Dit is de code die ten grondslag ligt aan de thread. Deze code is een oneindige lus die de waarde in ProgressBar1 willekeurig vergroot of afneemt en vervolgens 100 milliseconden wacht voordat deze doorgaat.
Voeg de volgende
Form1_Load
gebeurtenis-handler toe voor Form1. Deze code maakt een nieuwe thread, maakt de thread een achtergrondthread en start vervolgens de thread.private void Form1_Load(object sender, System.EventArgs e) { Thread trd = new Thread(new ThreadStart(this.ThreadTask)); trd.IsBackground = true; trd.Start(); }
Controleren of deze werkt
Maak de toepassing en voer deze uit. U ziet dat de waarde in ProgressBar1 willekeurig wordt gewijzigd. Dit is de nieuwe thread die wordt uitgevoerd.
Als u wilt laten zien dat de hoofdthread onafhankelijk is van de thread die de waarde van ProgressBar1 wijzigt, klikt u op de knop in het formulier. U ontvangt een dialoogvenster met het volgende foutbericht:
Dit is de hoofdthread
Wacht op invoer. U ziet dat de waarde in ProgressBar1 wordt gewijzigd.
Problemen oplossen
Zorg ervoor dat u in complexere toepassingen meerdere threads synchroniseert wanneer u toegang hebt tot gedeelde variabelen. Zie de vergrendelingsinstructie en verwante onderwerpen in de Online Help-documentatie voor Visual C# .NET voor meer informatie.
Verwijzingen
Zie Thread Class voor meer informatie.