Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 6311
Последний выпуск: 19.06.2015

Закрытие потока

43K
28 января 2012 года
YPotapych
24 / / 06.12.2009
Всем привет. У меня проблемма с потоками. При нажатии на кнопку должно выполняться действие в зависимости от текста на кнопке. Всё хорошо, но f.Abort() не прерывает поток, а его желательно совсем удалить. Помогите, пожалуйсто, разобраться.

Код:
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 = "Стоп";
                }

        }
296
28 января 2012 года
koodeer
1.2K / / 02.05.2009
Типичная ошибка.
В этом коде в одной ветви условного оператора создаётся локальная переменная 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 = "Стоп";
    }
}


Теперь главное. Метод Thread.Abort настоятельно не рекомендуется к применению! Об этом и в MSDN написано.
Довольно хороший материал по работе с потоками: http://rsdn.ru/summary/4512.xml. Рекомендую.

А ещё лучше перейти от использования System.Threading.Thread к классу System.Threading.Tasks.Task (доступен начиная с .NET 4.0).
43K
30 января 2012 года
YPotapych
24 / / 06.12.2009
Спасибо, попробую исправить

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог