如何不阻止对按钮的控制

本文关键字:控制 按钮 何不阻 | 更新日期: 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)始终在运行,不允许您使用停止按钮。您需要在循环结构上设置某种出口。