コード例 #1
0
 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;
 }
コード例 #2
0
 private void _logWindow_Closed(object sender, EventArgs e)
 {
     state = LogWindowState.CLOSED;
 }