2009-08-11 6 views
5

В моей программе у меня есть очень длинная задача, которая должна прерываться из GUI (WPF). Любые советы по проектированию потоковой архитектуры?Threading in C#. Прерывимая задача

Эта задача выглядит как N нить с таким кодом:

public void DoLongOperation() 
{ 
    for(int i=beginPoint; i<endPoint; i++) 
    { 
     doSomethingStupid(dataArray[i]); 
    } 
} 

ответ

10

Взгляните на BackgroundWorker; в частности, WorkerSupportsCancellation. Пример того, что вы хотите сделать, - WPF Multithreading: Using the BackgroundWorker and Reporting the Progress to the UI.

+0

Это отличный выбор. +1 –

+0

Да, действительно полезно и просто. Я знал об этом классе, но никогда не использовал его. Спасибо – ALOR

-1

Ну, вы можете проверить, следует ли его остановить, каждую итерацию цикла, проверив bool. Или просто .interrupt() и обработайте исключение (если это безопасно для его уничтожения в любое время).

0

.Interrupt() в потоке - это не лучший способ, единственный хороший способ - с bool, как вы говорите в своем ответе.