Как я могу контролировать, в какой теме я показываю свое всплывающее окно - PullRequest
0 голосов
/ 17 марта 2012

Я использую элемент управления, который является всплывающим окном.У меня есть методы, которые показывают и скрывают его, и мне нужно реализовать функцию, которая будет препятствовать отображению и скрытию моего всплывающего окна в разных потоках.Могу ли я показать свое всплывающее окно в не-пользовательской теме?

Обновление

Основная цель моего вопроса:

Не важно, из какойЗапускается метод Show, метод Hide должен находиться в том же потоке.Как это реализовать?

 public void Show()
        {
            IsShown = true;
            if (this.ChildWindowPopup == null)
            {
                this.ChildWindowPopup = new Popup();
                    try
                {
                    this.ChildWindowPopup.Child = this;
                }
                catch (ArgumentException)
                {
                    throw new InvalidOperationException("The control is already shown.");
                }
            }       
            if (this.ChildWindowPopup != null && Application.Current.RootVisual != null)
            {
                // Configure accordingly to the type
                InitializeProgressType();
                    // Show popup
                this.ChildWindowPopup.IsOpen = true;
            }
        }

 public void Hide()
        {
            IsShown = false;
            // Restore system tray
            SystemTray.IsVisible = currentSystemTrayState;
            this.progressBar.IsIndeterminate = false;
            this.ChildWindowPopup.IsOpen = false;
            }

1 Ответ

0 голосов
/ 17 марта 2012

Обычно работа с компонентами пользовательского интерфейса может выполняться только в потоке пользовательского интерфейса. Если вы хотите заблокировать запуск вашего конкретного всплывающего окна из потоков пользовательского интерфейса, вам необходимо предоставить интерфейс для его запуска, который внутренне проверяет поток, из которого он был выполнен - ​​возможно, с использованием классов SynchronizationContext или Thread, но в конце концов - это потребует показать всплывающее окно, вызвав метод в потоке пользовательского интерфейса.

...