/// <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++); }