Beispiel #1
0
 private static void ПриНеобработанномИсключенииПотока(object sender, System.Threading.ThreadExceptionEventArgs t)
 {
     if (!Барс.Клиент.Приложение.ежимWebПриложения)
     {
         ФормаПоказаИсключительнойСитуации.Показать("При выполнении прикладной подсистемы произошла необработанная исключительная ситуация.", t.Exception);
     }
 }
Beispiel #2
0
        public static void Показать(string ТекстСообщения, string Заголовок, Exception Исключение)
        {
            try
            {
                ФормаПоказаИсключительнойСитуации форма = new ФормаПоказаИсключительнойСитуации();
                форма.Сообщение  = ТекстСообщения;
                форма.Заголовок  = Заголовок;
                форма.Исключение = Исключение;

                форма.ShowDialog();
            }
            catch (Exception)
            {
            }
        }
Beispiel #3
0
 public static void Показать(string ТекстСообщения, Exception Исключение)
 {
     ФормаПоказаИсключительнойСитуации.Показать(ТекстСообщения, "", Исключение);
 }
Beispiel #4
0
        /// <summary>
        /// Метод инициализации нового треда
        /// </summary>
        /// <param name="ПараметрТреда"></param>
        private static void СтартоватьТред(object ПараметрТреда)
        {
            // мы уже находимся в новом треде

            System.Windows.Forms.Form ГлавнаяФормаПотока = null;
            try
            {
                // берем домен текущего приложения
                AppDomain доменПриложения = System.Threading.Thread.GetDomain();
                // назначаем перехватчик необработанных исключений потока
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(ПотокиПриложения.ПриНеобработанномИсключенииПотока);



                if (ПараметрТреда is System.Windows.Forms.Form)
                {
                    ГлавнаяФормаПотока = ПараметрТреда as System.Windows.Forms.Form;
                }
                else if (ПараметрТреда is Type)
                {
                    Type типСтартовогоОбъекта = ПараметрТреда as Type;
                    if (типСтартовогоОбъекта == typeof(System.Windows.Forms.Form) ||
                        типСтартовогоОбъекта.IsSubclassOf(typeof(System.Windows.Forms.Form)))
                    {
                        ГлавнаяФормаПотока = Activator.CreateInstance(типСтартовогоОбъекта) as System.Windows.Forms.Form;
                    }
                    else if (типСтартовогоОбъекта.GetInterface("ИнтерфейсТочкиВходаПотока") != null)
                    {
                        object объектТочкиВходаПотока = Activator.CreateInstance(типСтартовогоОбъекта);
                        if (объектТочкиВходаПотока != null)
                        {
                            ГлавнаяФормаПотока = типСтартовогоОбъекта.InvokeMember("ТочкаВходаПотока", BindingFlags.InvokeMethod, null, объектТочкиВходаПотока, new object [] { }) as System.Windows.Forms.Form;
                        }
                    }
                }
                else if (ПараметрТреда.GetType().GetInterface("ИнтерфейсТочкиВходаПотока") != null)
                {
                    ГлавнаяФормаПотока = ПараметрТреда.GetType().InvokeMember("ТочкаВходаПотока", BindingFlags.InvokeMethod, null, ПараметрТреда, new object [] { }) as System.Windows.Forms.Form;
                }

                if (ГлавнаяФормаПотока == null)
                {
                    throw new ИсключениеБарсПриложения("Не удалось получить главную форму нового потока приложения.");
                }

                bool результатУстановкиПараметровОкна = false;

                try
                {
                    результатУстановкиПараметровОкна = ( bool )ГлавнаяФормаПотока.GetType().InvokeMember("УстановитьПараметрыОкна", BindingFlags.InvokeMethod, null, ГлавнаяФормаПотока, new string [] { "" });
                }
                catch (Exception)
                {
                    результатУстановкиПараметровОкна = true;
                }

                if (результатУстановкиПараметровОкна)
                {
                    // регистрируем окно в нашем реестре

                    НастольноеПриложение.ДобавитьТред(ГлавнаяФормаПотока, "");

                    ApplicationContext контексТреда = new ApplicationContext(ГлавнаяФормаПотока);

                    Application.Run(контексТреда);

                    Type тип = Type.GetType("Барс.Ядро.МенеджерБД,Ядро");
                    if (тип != null)
                    {
                        тип.InvokeMember("ОсвободитьРесурсыТреда", BindingFlags.InvokeMethod, null, null, null);
                    }
                }
            }
            catch (Exception exc)
            {
                ФормаПоказаИсключительнойСитуации.Показать(exc.Message, exc);
            }
            finally
            {
                if (ГлавнаяФормаПотока != null)
                {
                    НастольноеПриложение.ИсключитьТред();
                }
            }
        }