как получить доступ к окну в многопоточном приложении wpf - PullRequest
0 голосов
/ 18 февраля 2010

У меня есть отдельный поток, который прослушивает данные.И при получении некоторых данных ему нужно получить доступ к одному из окон в приложении и установить некоторые поля для этого окна.

Прямо сейчас, когда я использую это, оно выдает исключение (говоря, что эти потоки не могут получить доступ, поскольку Windows1 принадлежитдругим потоком):

        foreach (Window w in App.Current.Windows)
        {
            if (w.Name == "WindowIamInterested")
            {
                //w.SetField set some fields in the window and 
                //and do w.Show() or w.Activate() to show the window to user
            }
        }

Приведенный выше код выполняется в отдельном потоке, а не в основном потоке.Есть ли способ, которым я могу получить доступ и изменить окно.

Ответы [ 3 ]

2 голосов
/ 18 февраля 2010

Вы ищете диспетчер окон ? Вы можете получить диспетчер из окна и попросить его выполнить ваш код через Dispatcher.Invoke () или Dispatcher.BeginInvoke () ...

1 голос
/ 18 февраля 2010

Вы можете использовать Dispatcher.Invoke :

Application.Current.Dispatcher.Invoke(
   (ThreadStart)delegate
   {
      // do your UI work here
   });

Dispatcher.Invoke выполняется синхронно. Если вы хотите выполнить асинхронно, вы можете использовать Dispatcher.BeginInvoke .

1 голос
/ 18 февраля 2010

Если вы работаете с элементом управления WPF, вы можете использовать его диспетчер для планирования обновления в потоке пользовательского интерфейса:

myControl.Dispatcher.BeginInvoke(
  System.Windows.Threading.DispatcherPriority.Normal
  , new System.Windows.Threading.DispatcherOperationCallback(delegate
  {                   
    // update control here
    return null;
  }), null);

Вы бы использовали Invoke(), если вам нужно заблокировать до обновления элемента управления, в противном случае вы должны использовать BeginInvoke().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...