private bool IsErr(object obj) { if ((obj is CalcError) && (((CalcError)obj) != CalcErrors.NotAvailable)) { return(true); } if (!(obj is string)) { return(false); } CalcError error = CalcErrors.Parse((string)(obj as string), CultureInfo.InvariantCulture); return((error != null) && (error != CalcErrors.NotAvailable)); }
private bool IsError(object obj) { return((obj is CalcError) || ((obj is string) && (CalcErrors.Parse((string)(obj as string), CultureInfo.InvariantCulture) != null))); }
//Расчет по всем формулам public void Calculate() { try { CalcErrors.Clear(); RootParam = new CalcParamRun(); int n = CalcParamsId.Count, i = 0; foreach (var c in CalcParamsId.Values) { if (c == null) { AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета"); } else { c.RunParam = null; foreach (var m in c.Methods.Values) { if (m == null) { AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета"); } else { m.RunParam = null; } } } } if (IsError) { return; } foreach (var c in CalcParamsId.Values) { if (c.IsNotObject) { c.Calculate(); foreach (var m in c.Methods.Values) { if (m.IsNotObject) { m.Calculate(); } } } if (IsError) { return; } if (n > 40 && ++i % (n / 20) == 0) { Procent = 80.0 * i / n; } } //Запись ошибок расчета в лог var count = CalcErrors.Count; if (count > 0) { string s = ""; int j = 0; while (j < 10 && j < count) { s += (s == "" ? "" : ", ") + CalcErrors[j++].Address; } string p = count % 10 == 1 ? "параметр" : (count % 10 == 2 || count % 10 == 3 || count % 10 == 4 ? "параметра" : "параметров"); AddWarning("При расчете произошли ошибки", null, count + " " + p + " с ошибками: " + s + (j < count ? " и др." : "")); } AddEvent("Объем используемой памяти", GC.GetTotalMemory(false).ToString()); } catch (OutOfMemoryException ex) { AddEvent("Объем используемой памяти", GC.GetTotalMemory(false).ToString()); AddError("Ошибка при расчете", ex); throw; } catch (Exception ex) { AddError("Ошибка при расчете", ex); } }