我正在创建一个程序,其中数据被填充到列表框中。当我单击一个复选框循环时,它应该从一开始就循环。当我单击复选框时它不会检查它也会阻止我因为无限循环而点击其他任何内容。有没有人知道这方面的解决方案?
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
while(checkBox1.Checked == true)
{
Play();
}
}
答案 0 :(得分:0)
您需要Play才能在后台线程上执行,或者您需要激活Windows消息泵,以便让UI时间对输入作出反应。这是后者:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
while(checkBox1.Checked == true)
{
Play();
Application.DoEvents();
}
}
DoEvents使Windows处理当前在消息队列中的任何消息(如UI输入)。没有它,Windows消息永远不会被处理,因为Play在UI线程上并且消息泵永远没有机会运行,所以即使你疯狂地点击复选框,windows也没有机会告诉你的应用程序。< / p>
使用后台线程播放有很多方法可以做到这一点。这些示例比DoEvents的消息泵方法更为复杂。
请记住,多线程更像是一种更难以正确实现的高级方法,但值得理解。
答案 1 :(得分:0)
我做了一个基于任务并行库(TPL)的实现。 TPL现在是微软推荐的事实多线程范例。特别是TPL最适合在后台进行其他工作时保持UI响应。以下是相同的代码段:
{{1}}