如何不阻止对按钮的控制
本文关键字:控制 按钮 何不阻 | 更新日期: 2023-09-27 18:23:42
我不知道这个问题的表述是否正确,但让我解释一下。为了使事情变得简单,我在WPF中添加了按钮。按钮启动具有以下代码
private void Button_Click(object sender, RoutedEventArgs e)
{
int x = 0;
while (r ==false)
{
lstBox.Items.Add(x++);
}
}
和按钮停止:
private void btnStop_Click(object sender, RoutedEventArgs e)
{
r = true;
}
"r"是一个全局布尔变量。
无论何时单击"开始",我都无法再单击"停止"按钮。
你知道如何使按钮停止活动或"可点击",而不管正在执行什么吗?
delegate void Work();
private void Button_Click(object sender, RoutedEventArgs e)
{
new Work(WorkOne).BeginInvoke(null, null);
}
private void WorkOne()
{
int x = 0;
while (r == false)
{
listBox.Dispatcher.Invoke(new Action(() =>{ listBox.Items.Add(x++); }));
System.Threading.Thread.Sleep(x);
}
}
private void btnStop_Click(object sender, RoutedEventArgs e)
{
r = true;
}
这并不像看上去那么微不足道。你需要释放循环中的wpf线程,这样它就可以处理其他事件并对其他按钮做出反应。要实现这一点,需要学习很多东西。谷歌backgoundworker类或taskasync-await(适用于vs2012及更新版本)。但也有一个替代的简单破解方法:googlewindowsformsdoevents()你也可以从wpf调用它。但是一旦程序变得更加复杂,这将变得非常难以维护。
看起来你陷入了一个无限循环。while(r==false)始终在运行,不允许您使用停止按钮。您需要在循环结构上设置某种出口。