Example #1
0
        static void Main(string [] args)
        {
            // чтение параметров командной строки
            try
            {
                // загружаем настройки приложения
                List <string> параметрыЗапуска = new List <string>();
                foreach (string параметрЗапуска in args)
                {
                    параметрыЗапуска.Add(параметрЗапуска);
                }

                НастольноеПриложение.ЗагрузитьПараметрыПриложения(параметрыЗапуска);

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new ГлавноеОкно());
            }
            catch (Exception ошибка)
            {
                DevExpress.XtraEditors.XtraMessageBox.Show(ошибка.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #2
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)
                {
                    НастольноеПриложение.ИсключитьТред();
                }
            }
        }