private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Стоп")
{
Thread f = new Thread(new ThreadStart(drive));
f.Abort();
button1.Text = "Старт";
}
else if (button1.Text == "Старт")
{
Thread f = new Thread(new ThreadStart(drive));
f.Start();
button1.Text = "Стоп";
}
}
Закрытие потока
Всем привет. У меня проблемма с потоками. При нажатии на кнопку должно выполняться действие в зависимости от текста на кнопке. Всё хорошо, но f.Abort() не прерывает поток, а его желательно совсем удалить. Помогите, пожалуйсто, разобраться.
В этом коде в одной ветви условного оператора создаётся локальная переменная Thread f, и запускается поток. В другой ветви условия создаётся ещё одна локальная переменная Thread f, и уже этот, другой поток, прерывается.
Нужно сделать f полем класса. И название дать более осмысленное.
Код:
Thread thread;
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Стоп")
{
thread.Abort();
button1.Text = "Старт";
}
else
{
thread = new Thread(new ThreadStart(drive));
thread.Start();
button1.Text = "Стоп";
}
}
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Стоп")
{
thread.Abort();
button1.Text = "Старт";
}
else
{
thread = new Thread(new ThreadStart(drive));
thread.Start();
button1.Text = "Стоп";
}
}
Теперь главное. Метод Thread.Abort настоятельно не рекомендуется к применению! Об этом и в MSDN написано.
Довольно хороший материал по работе с потоками: http://rsdn.ru/summary/4512.xml. Рекомендую.
А ещё лучше перейти от использования System.Threading.Thread к классу System.Threading.Tasks.Task (доступен начиная с .NET 4.0).
Спасибо, попробую исправить