我有兩個按鈕一個用於開始和一個停止在我的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