Остановить действие в C # или изменить его на поток? - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть следующий код:

void ThreadMethod()
{
   Console.WriteLine("Thread..");
}

IAsyncResult actionResult;

Action a = new Action();
Thread t = new Thread(new ThreadStart(ThreadMethod));

actionResult = a.BeginInvoke(ActionCompleted, null);
t.Start();

void ActionCompleted(IAsyncResult ar)
{
   if (ar.IsCompleted)
   {
      Console.WriteLine("Action finished");
      t.Abort();
   }
}

Как я могу остановить действие вручную?Например,

if (actionShouldBeStopped)
{
   action.Stop(); // and ActionComplete should be run.
}

Другой вариант - изменить действие на поток, но тогда как оно должно выглядеть?Как я могу реализовать что-то вроде ActionCompleted для Thread?

Спасибо, Maestro

1 Ответ

2 голосов
/ 06 декабря 2011

Я бы переключил вашу реализацию с Thread на класс BackgroundWorker , он поддерживает отмену (т.е. остановку потока), отчет о ходе выполнения и имеет событие для завершения потока (событие RunWorkerCompleted) )

...