В моем приложении UWP, когда успешный пост-звонок, мне нужно показать уведомление пользователю.Это уведомление должно отображаться в текущем окне, в котором находится пользователь.Я узнаю об успехе почтового звонка только в фоновом режиме.Поэтому, как только я получаю код успеха от сервера, мне нужно определить, какое окно является текущим, и я должен отобразить уведомление для пользователя в этом окне.
Window.Current
дает мне ноль при доступе из фонового потока.
Если я пытаюсь получить доступ к Window.Current
в CoreApplication.MainView.Dispatcher.RunAsync
, это дает мне главное окно.
Если я пытаюсь получить доступ к CoreApplication.GetCurrentView().CoreWindow.Dispatcher
из фонового потока, CoreApplication.GetCurrentView()
выдаетниже исключения
Exception = {System.Runtime.InteropServices.COMException (0x80070490): Element not found.
Element not found.
at Windows.ApplicationModel.Core.CoreApplication.GetCurrentView()
Я провел небольшой цикл анализа, чтобы выяснить, что происходит с приведенным ниже фрагментом кода.
foreach (var iteratingview in CoreApplication.Views)
{
iteratingview.Dispatcher.RunOnUIThread(() =>
{
int id = ApplicationView.GetForCurrentView().Id;
bool main = CoreApplication.GetCurrentView().IsMain;
bool isMain = iteratingview.IsMain;
});
}
Логическое значение CoreApplication.GetCurrentView().IsMain
дает мне true
когда iteratingview
является основным видом и false
, когда iteratingview
является вторичным представлением, что означает, что CoreApplication.GetCurrentView()
возвращает мне представление, в каком диспетчере я его называю.ApplicationView.GetForCurrentView()
также ведет себя точно так же.
Но мое требование - определить, какое окно / представление является текущим, где находится пользователь.
Я что-то не так делаю или естьДругой способ получить диспетчер текущего окна из фонового потока?