C# 如何不阻止按钮的控制?

C# 如何不阻止按钮的控制?,c#,wpf,C#,Wpf,我不知道这个问题的表述是否正确,但让我解释一下。 为了使事情变得简单,我在WPF中添加了按钮。按钮start有以下代码 private void Button_Click(object sender, RoutedEventArgs e) { int x = 0; while (r ==false) { lstBox.Items.Add(x++); } } 和按钮停止: privat

我不知道这个问题的表述是否正确,但让我解释一下。 为了使事情变得简单,我在WPF中添加了按钮。按钮start有以下代码

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”是一个全局布尔变量

无论何时单击开始,我都无法再单击停止按钮


您知道如何使按钮停止激活或“可点击”,而不管执行的是什么

看起来你的生活陷入了无限循环。虽然(r==false)始终在运行,但不允许您使用停止按钮。在循环结构上需要某种出口

看起来你的生活陷入了无限循环。虽然(r==false)始终在运行,但不允许您使用停止按钮。在循环结构上需要某种出口

看起来你的生活陷入了无限循环。虽然(r==false)始终在运行,但不允许您使用停止按钮。在循环结构上需要某种出口

看起来你的生活陷入了无限循环。虽然(r==false)始终在运行,但不允许您使用停止按钮。在循环结构上需要某种出口

这并不像看上去那么琐碎。您需要释放循环中的wpf线程,以便它可以处理其他事件并对其他按钮作出反应。要实现这一点,有很多经验。
google backgoundworker类或任务异步等待(适用于vs2012及更新版本)。但是还有一个简单的替代方法:google windows forms doevents(),你也可以从wpf中调用它。但一旦你的程序变得更复杂,这将很难维护。

这并不像看上去那么简单。您需要释放循环中的wpf线程,以便它可以处理其他事件并对其他按钮作出反应。要实现这一点,有很多经验。
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;
}

google backgoundworker类或任务异步等待(适用于vs2012及更新版本)。但是还有一个简单的替代方法:google windows forms doevents(),你也可以从wpf中调用它。但一旦你的程序变得更复杂,这将很难维护。

这并不像看上去那么简单。您需要释放循环中的wpf线程,以便它可以处理其他事件并对其他按钮作出反应。要实现这一点,有很多经验。
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;
}

google backgoundworker类或任务异步等待(适用于vs2012及更新版本)。但是还有一个简单的替代方法:google windows forms doevents(),你也可以从wpf中调用它。但一旦你的程序变得更复杂,这将很难维护。

这并不像看上去那么简单。您需要释放循环中的wpf线程,以便它可以处理其他事件并对其他按钮作出反应。要实现这一点,有很多经验。
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;
}

google backgoundworker类或任务异步等待(适用于vs2012及更新版本)。但是还有一个简单的替代方法:google windows forms doevents(),你也可以从wpf中调用它。但是,一旦程序变得更复杂,这将很难维护。

您正在阻止ui线程,因为您在它上无限循环。您可能想考虑为这个或后台工作者类使用任务并行库。我将查看后台工作者类。谢谢。你正在阻止ui线程,因为你在它上面无限循环。您可能想考虑为这个或后台工作者类使用任务并行库。我将查看后台工作者类。谢谢。你正在阻止ui线程,因为你在它上面无限循环。您可能想考虑为这个或后台工作者类使用任务并行库。我将查看后台工作者类。谢谢。你正在阻止ui线程,因为你在它上面无限循环。您可能想考虑为这个或后台工作者类使用任务并行库。我将查看后台工作者类。谢谢,谢谢你的回复。事实上,我想要一些方向,而你已经做到了。谢谢你的回复。事实上,我想要一些方向,而你已经做到了。谢谢你的回复。事实上,我想要一些方向,而你已经做到了。谢谢你的回复。我真的想要一些方向,而你已经做到了。
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;
}