Je souhaite en savoir plus sur le threading et créer une petite application de test qui modifie la couleur de fond d'une étiquette.Test de thread simple
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//lblColor
public Color theLabel
{
get { return this.lblColor.BackColor; }
set { this.lblColor.BackColor = value; }
}
//btnStart
private void btnStart_Click(object sender, EventArgs e)
{
ThreadTest cColor = new ThreadTest();
Thread tColor = new Thread(new ThreadStart(cColor.ChangeColor));
tColor.Start();
}
}
Et ...
public class ThreadTest
{
public void ChangeColor()
{
Form1 foo = new Form1();
while (true)
{
foo.theLabel = Color.Aqua;
foo.theLabel = Color.Black;
foo.theLabel = Color.DarkKhaki;
foo.theLabel = Color.Green;
}
}
}
Le seul problème est pourquoi je ne peux pas faire ce travail de code? Je peux voir que le code dans ChangeColor s'exécute mais la couleur de l'étiquette ne change pas.
C'est parce que votre fils n » asynchrone ... le formulaire réside sur le même fil que votre code de changement, et donc le formulaire n'a aucune chance de se redessiner. Je suis juste trop paresseux pour former maintenant une réponse qui explique exactement pourquoi et comment utiliser les délégués. – Bobby
Comme indiqué dans ma réponse ci-dessous, le code ne fonctionne pas à cause de Form1 foo = new Form1(); dans ThreadTest.ChangeColor ... utilisez le début de thread paramétré ... toutes les suggestions concernant backgroundworker etc sont aussi de bonnes idées. –