У меня есть две кнопки для начала и одна для остановки в моей форме пользовательского интерфейса, и у меня есть один бесконечный цикл, который выполняет некоторую функцию в моих программах имен классов в методе. Кнопка запуска нажата пользователь вызывает этот метод для выполнения бесконечного цикла, и мне нужно разбить этот бесконечный цикл, когда пользователь нажимает кнопку остановки, после чего мой компилятор вырвется из этого бесконечного цикла и войдет в код внутри кнопки stop click. Я пытаюсь использовать метод 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#, но мне нужно продолжить это.
Спасибо!
Почему вы отмечаете этот вопрос как `[java]`, `[php]`, `[C++]` и `[c]`, если этот вопрос относится только к C#? (Я отредактировал его, чтобы включить только теги, которые были указаны). – 2010-11-26 12:03:14
Пожалуйста, переформатируйте код. Выберите весь блок и используйте функцию «образец кода» на нем, возможно, придется сделать это дважды, вы также увидите предварительный просмотр того, как это будет выглядеть в конечном итоге. – Mephane 2010-11-26 12:04:25
Вы должны использовать поток для выполнения работы. – MrFox 2010-11-26 12:14:59