Это - шаблон, за которым я обычно следую при установке ремня безопасности для тестирования абстрактного класса:
public abstract class MyBase{
/*...*/
public abstract void VoidMethod(object param1);
public abstract object MethodWithReturn(object param1);
/*,,,*/
}
И версия я использую под тестом:
public class MyBaseHarness : MyBase{
/*...*/
public Action<object> VoidMethodFunction;
public override void VoidMethod(object param1){
VoidMethodFunction(param1);
}
public Func<object, object> MethodWithReturnFunction;
public override object MethodWithReturn(object param1){
return MethodWihtReturnFunction(param1);
}
/*,,,*/
}
, Если абстрактные методы называют, когда я не ожидаю его, тестовый сбой. При расположении тестов я могу легко погасить абстрактные методы с лямбдами, которые работают, утверждает, выдайте исключения, возвратите различные значения, и т.д.
Взгляните на BackgroundWorker ; в частности, WorkerSupportsCancellation . Вот пример того, что вы хотите сделать в WPF Multithreading:
Ну, вы можете проверить, нужно ли его останавливать, каждую итерацию цикла, проверив логическое значение. Или просто используйте его .interrupt () и обработайте исключение (если это безопасно в любой момент).
. Прерывание () в потоке - не лучший способ, единственный хороший способ - с логическим значением, как вы говорите в своем ответе.