Здравствуйте, 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. и Б.С.