Re: Cancellable calculations. Научите.
От: oxid  
Дата: 20.08.10 16:05
Оценка:
Здравствуйте, Kore Sar, Вы писали:

KS>Здрасьте.


KS>Есть у нас числовые вычисления (голый C#). Дерево объектов проходится вдоль и поперёк, и для каждого листка считаются значения. Выглядит примерно так:

KS>
KS>public Result Calculate(Parameters parameters)
KS>{
KS>  if (this.IsLeaf)
KS>  {
KS>    return this.GetCalculationFormulaStrategy(parameters).Calculate();
KS>  }
KS>  else
KS>  {
KS>    return this.ListAllChilds().Aggregate(child => child.Calculate(parameters));
KS>  }
KS>}
KS>


KS>Нужно сделать так, чтобы по "знаку свыше" (клику пользователя) можно было отменить все эти подсчеты. Приложение многопоточное. Клик пользователя происходит в другом потоке.

KS>Я рассматривал варианты:
KS>1) Иметь bool cancelled переменную (ГДЕ?), проверять на очередной итерации и, если что, делать return null (или кидать exception).
KS>2) Обрывать поток нафиг.
KS>3) Ваш вариант...

KS>Кто делал подобное, подскажите правильный путь. Спасибо.


Вот как это делается в WPF с помощью BackgroundWorker:

http://msdn.microsoft.com/en-en/library/system.componentmodel.backgroundworker.aspx

Смотрите метод CancelAsync и cвойство CancellationPending.
В любом случае надо будет вводить в ваш код специальную переменную.
Трудно быть богом(с) A.C. и Б.С.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.