我有两个按钮一个用于开始和一个停止在我的UI形式,我有一个无限循环,执行一些函数在我的班级名称程序中的一个方法。单击开始按钮用户调用这个方法来执行无限循环,当用户点击停止按钮时,我需要打破这个无限循环,之后我的编译器将跳出这个无限循环并进入按钮停止点击中的代码。 我想用Application.DoEvents()
的方法,如果我的无限循环代码是在开始按钮点击的内部,这是行之有效的,但如果我的无限循环代码是在我创建的新类中,即程序,如何使用Application.DoEvents()
方法打破这个无限循环。突破我的无限循环
实施例:
namespace inFiniteLoopTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool stopBtnClk = false;
bool startBtnClk = false;
private void StartBtn_Click(object sender, EventArgs e)
{
stopBtnClk=false;
startBtnClk = true;
while(true)
{
//some code to be executed
Application.DoEvents();
if (stopBtnClk == true)
{
break;
}
}
}
private void StopBtn_Click(object sender, EventArgs e)
{
stopBtnClk = true;
if (startBtnClk == true)
{
//Application.Exit();
MessageBox.Show("success");
}
}
此运作良好。
但
public class programs
{
public static void infiniteLoop(bool stopBtnClick)
{
while(true)
{
//some code to be executed
Application.DoEvents();
if (stopBtnClk == true)
{
break;
}
}
}
}
//and my UI code to call this class is
namespace inFiniteLoopTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool stopBtnClk = false;
bool startBtnClk = false;
private void StartBtn_Click(object sender, EventArgs e)
{
stopBtnClk=false;
startBtnClk = true;
programs.infiniteLoop(stopBtnClk);
}
private void StopBtn_Click(object sender, EventArgs e)
{
stopBtnClk = true;
if (startBtnClk == true)
{
//Application.Exit();
MessageBox.Show("success");
}
}
}
,但是这是行不通的。
即使编译器在单击停止按钮时显示消息“成功”,但调试器仍然表示运行在我的窗体中。 我希望我的问题很清楚。 我恳请您尽快回答我的问题并摆脱此问题! 如果您特别带线,我公开接受您的答案。
对不起,我是C#的初学者,但我需要继续。
谢谢!
如果这个问题只涉及到C#,为什么你把这个问题标记为`[java]`,`[php]`,`[C++]`和`[c]`? (我编辑它只包含适当的标签)。 – 2010-11-26 12:03:14
请重新格式化代码。选择整个模块,并使用其上的“代码示例”功能,可能必须执行两次,您还会看到最终模样的预览。 – Mephane 2010-11-26 12:04:25
你应该使用一个线程来完成这项工作。 – MrFox 2010-11-26 12:14:59