public void Show() { if (state == LogWindowState.CLOSED) { if (_loggerUiThread != null) { Dispatcher.FromThread(_loggerUiThread)?.InvokeShutdown(); _loggerUiThread.Join(); } _loggerUiThread = new Thread(() => { _logWindow = new LogWindow(_logvm); _logWindow.Show(); _logWindow.Closed += _logWindow_Closed; try { Dispatcher.Run(); } catch { return; } return; }); _loggerUiThread.SetApartmentState(ApartmentState.STA); _loggerUiThread.IsBackground = false; _loggerUiThread.Start(); while (true) { Dispatcher dispatcher = Dispatcher.FromThread(_loggerUiThread); if (dispatcher == null) { Thread.Sleep(100); } else { break; } } } else { Dispatcher dispatcher = Dispatcher.FromThread(_loggerUiThread); if (dispatcher is null) { return; } if (!dispatcher.HasShutdownStarted) { dispatcher.Invoke(() => _logWindow.Activate()); } } state = LogWindowState.OPEN; }
private void _logWindow_Closed(object sender, EventArgs e) { state = LogWindowState.CLOSED; }