Приложение 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    
    }
}
Другие вопросы по тегам