【发布时间】:2017-07-13 21:54:42
【问题描述】:
我正在使用 C#、.Net4.0 和 Visual Studio 2010,当用户单击按钮时,我试图从我的 Windows 窗体应用程序中获取此行为:
- GUI LED 开始闪烁
- 长梯级操作开始
-
当点 2 的操作结束时,LED 停止闪烁
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(); }
我还尝试使用 3 个不同的事件和/或计时器..
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;
}
结果始终相同:LED 仅在长时间运行操作结束时开始闪烁 (Thread.Sleep(2000);),然后突然停止,因此您什么都看不到。为什么会发生这种情况?如何获得所需的行为?
我添加更多信息。我尝试使用 BackgroundWorked 并以这种方式实现想要的行为:
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();
}
当 TestWebService() 运行时,我关闭了 LED (LedOn(LED.WS);)。当 TestWebService() 完成时,LED 亮起。 如果在 Click 事件中启动和取消,BlinkWorker 仍然无法工作。
仅供参考:如果我制作一个开始闪烁的按钮和一个停止闪烁的按钮,它就可以完美地工作。
【问题讨论】:
标签: c# multithreading winforms visual-studio-2010 .net-4.0