Приложение Windows Form, поток не остановится
Я использую приложение Windows Form для своей темы. Когда я нажимаю на button1, он запускает поток и рекурсивно выполняет работу.
Здесь Форма не будет висеть, как я ожидал. Я хочу остановить текущий запущенный поток, когда я нажимаю на Button2. Однако это не сработает.
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(doWork); // Kick off a new thread
t.Start();
}
private void button2_Click(object sender, EventArgs e)
{
t.Abort();
}
static void doWork()
{
while (true)
{
//My work
}
}
}
. При отладке метод button2_Click не будет попадать в указатель. Я думаю, потому что Нить занята.
Пожалуйста, поправьте меня, если я где-то ошибаюсь.
1 ответ
Решение
Вы не можете убить нить, как это. Причина в том, чтобы избежать ситуаций, когда вы добавляете блокировку в поток, а затем убиваете ее до снятия блокировки.
Вы можете создать глобальную переменную и управлять ее потоком, используя ее.
Простой пример:
private volatile bool m_StopThread;
private void button1_Click(object sender, EventArgs e)
{
t = new Thread(doWork); // Kick off a new thread
t.Start();
}
private void button2_Click(object sender, EventArgs e)
{
m_StopThread = true;
}
static void doWork()
{
while (!m_StopThread)
{
//My work
}
}