Мне нужно вызвать метод, который требует вызова из потока пользовательского интерфейса. Мой код выполняется как фоновая задача (я использую компонент времени выполнения Windows в UWP и запускаю фоновую задачу каждые 15 минут).
Я бы хотел вызвать этот метод из метода Run()
фоновой задачи.
Проблема в том, что если приложение не открыто, Window.Current
равно null
, поэтому я не могу использовать Dispatcher
. Я попробовал варианты из Правильный способ получить CoreDispatcher в приложении Магазина Windows , Выполнить код в потоке пользовательского интерфейса в WinRT и Быть в двух местах одновременно, используя несколько окон (создание нового представления), но все они терпят неудачу либо с This method must be called on an UI thread.
, либо с The main windows has not been created.
Я также попробовал следующее.
Thread t = new Thread(() => apiCall());
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join();
и далее, используя Dispatcher
.
CoreApplicationView newView = CoreApplication.CreateNewView();
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => apiCall());
Оба подхода терпят неудачу с вышеуказанными ошибками, соответственно.