C# 如何不阻止按钮的控制?
我不知道这个问题的表述是否正确,但让我解释一下。 为了使事情变得简单,我在WPF中添加了按钮。按钮start有以下代码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
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;
}