J'utilise C#, Net4.0 et Visual Studio 2010 et j'essaie d'obtenir ce comportement de mon application de formulaire Windows lorsque l'utilisateur clique sur un bouton:C# Démarrer et arrêter le fil dans le bouton SAME cliquez sur l'événement
- Une interface graphique LED clignote
- une opération longue échelon commence
Lorsque l'opération se termine au point 2 de la LED cesse de clignoter
private void Btn_WebService_Click(object sender, EventArgs e) { Thread_Blink = new Thread(() => { LED_Blink(LED.WS); }); Thread_Blink.Start(); // Do something that takes time.. Let's imulate with a sleep Thread.Sleep(2000); Thread_Blink.Abort(); }
J'ai aussi essayé d'utiliser 3 différents événements et/ou des minuteries ..
private void Btn_WebService_MouseDown(object sender, MouseEventArgs e)
{
Timer_Blink.Enabled = true;
}
private void Btn_WebService_Click(object sender, EventArgs e)
{
// Do something that takes time.. Let's imulate with a sleep
Thread.Sleep(2000);
}
private void Btn_WebService_MouseUp(object sender, MouseEventArgs e)
{
Timer_Blink.Enabled = false;
}
Le résultat est toujours le même: La LED commence à clignoter seulement à la fin de la longue opération de fonctionnement (Thread.Sleep(2000);
) et ARRÊTS soudainement de sorte que vous ne puissiez rien voir. Pourquoi cela arrive-t-il et comment puis-je obtenir le comportement souhaité?
J'ajoute plus d'infos. J'ai essayé d'utiliser BackgroundWorked et mis à exécution les behavour voulu ainsi:
private void Btn_WebService_Click(object sender, EventArgs e)
{
BlinkWorker.RunWorkerAsync(LED.WS);
LedOn(LED.WS);
TestWebService(); // This method takes about 2 seconds to answer..
LedOff(LED.WS);
BlinkWorker.CancelAsync();
}
Alors que le TestWebService() est en cours d'exécution, je reçois la LED éteinte (LEDOn (LED.WS);). Lorsque TestWebService() a terminé, le voyant s'allume. Le BlinkWorker ne fonctionne toujours pas s'il est démarré et annulé dans l'événement Click.
FYI: Si je fais un bouton qui commence à clignoter et un autre bouton qui l'arrête, cela fonctionne parfaitement.