(UWP) Window.Current в потоке пользовательского интерфейса - единственный способ получить окно? - PullRequest
0 голосов
/ 17 июня 2020

У меня есть проект Unity, который я экспортирую для добавления наложений XAML, и недавно использовал единство display.Activate () для создания второго окна, но мне нужно получить окно для этого второго представления, чтобы установить содержимое XAML. После запуска программы я запускаю следующий код в потоке пользовательского интерфейса основного представления:

var views = CoreApplication.Views;
Logger.Log(this, "using view count: " + views.Count);

for (int i = 0; i < views.Count; i++) 
{
  int index = i;
  if (views[index] != CoreApplication.MainView) 
  {    
    try 
    {
      Logger.Log(this, "fetching window for view " + index);      
      await views[index].Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => 
      {           
        if (Window.Current == null) Logger.Log(this, "window is null");
        else Logger.Log(this, "window was found");
      });
    } 
    catch (Exception e) 
    {
      Logger.Log(this, "exception thrown fetching window: "+ e.Message);      
    }
    break;
  }    
}

И он всегда сообщает, что «окно равно нулю». Создание нового Frame () в RunAsyn c также вызывает исключение, что интерфейс был упорядочен для другого потока, что также указывает на то, что RunAsyn c () не запускается в соответствующем потоке пользовательского интерфейса.

В конечном итоге мне нужно установить содержимое XAML второго представления, и у меня возникают проблемы с выяснением, как для этого получить доступ к окну, и я чувствую, что, должно быть, неправильно понимаю что-то фундаментальное о RunAsyn c, поскольку примеры представлений i ' Мы видели, что они могут свободно создавать в нем фреймы, извлекать windows и назначать контент, но в этом случае это не удается.

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