コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: CalcIsErrorFunction.cs プロジェクト: Daoting/dt
 private bool IsError(object obj)
 {
     return((obj is CalcError) || ((obj is string) && (CalcErrors.Parse((string)(obj as string), CultureInfo.InvariantCulture) != null)));
 }
コード例 #3
0
        //Расчет по всем формулам
        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);
            }
        }