【发布时间】:2010-11-26 12:01:36
【问题描述】:
我的 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]? (我已经对其进行了编辑以仅包含正确的标签)。 -
请重新格式化代码。选择整个块,并在其上使用“代码示例”功能,可能需要执行两次,您还将看到它最终的样子。
-
你应该使用线程来完成这项工作。
-
你确定第二个编译吗?您在programs.infiniteLoop 中访问stopBtnClk。 stopBtnClk 不是类程序的参数或字段。
-
@MrFox 这就是我想要的,然后帮助我解决这个问题,使用 thread.10q
标签: c#