Beispiel #1
0
        /// <summary>
        /// Запуск формы в другом потоке
        /// </summary>
        /// <param name="hFinishedSearchEvent">
        /// Событие, установка которого закрывает окно
        /// </param>
        /// <param name="th">
        /// Поток, в котором создаётся окно
        /// </param>
        /// <param name="WndTitle"></param>
        /// <param name="WndText"></param>
        public static int ShowAsync(out AutoResetEvent hFinishedSearchEvent, out Thread th, string WndTitle, string WndText, Window OwnerWindow)
        {
            hFinishedSearchEvent = new AutoResetEvent(false);
            th = new Thread(ShowAsyncThreadFunc)
            {
                IsBackground = true
            };

            if (m_csShowCounter.Value > 0)
            {
                return(0);
            }

            m_csShowCounter++;

            CShowAsyncParam ThreadParam = new CShowAsyncParam()
            {
                m_ID = NextWndID,
                m_hFinishedSearchEvent = hFinishedSearchEvent,
                m_WndTitle             = WndTitle,
                m_WndText     = WndText,
                m_OwnerWindow = OwnerWindow
            };

            th.SetApartmentState(ApartmentState.STA);
            th.Start(ThreadParam);

            GlobalDefines.DoEvents(DBManagerApp.MainWnd); // Чтобы не зависла главная форма и в её заголовке не было написано "(Не отвечает)"

            return(NextWndID++);
        }