Создание потока пользовательского интерфейса в фоновой задаче UWP - PullRequest
0 голосов
/ 15 мая 2018

Мне нужно вызвать метод, который требует вызова из потока пользовательского интерфейса. Мой код выполняется как фоновая задача (я использую компонент времени выполнения 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());

Оба подхода терпят неудачу с вышеуказанными ошибками, соответственно.

Ответы [ 2 ]

0 голосов
/ 14 августа 2019

Этот ответ может быть тем, что вы ищете:

"Обычно проще иметь фоновые операции вызова потока пользовательского интерфейса, а не фоновые операции обновлять поток пользовательского интерфейса.

Итак,Я рекомендую вам использовать DispatcherTimer, и тогда вам вообще не нужно будет использовать Dispatcher. "Здесь:

Обновление ObservableCollection из потока без пользовательского интерфейса

0 голосов
/ 15 мая 2018

Фоновая задача не может запустить пользовательский интерфейс.Вы можете показать всплывающее уведомление, чтобы пользователь мог открыть приложение с помощью всплывающего уведомления.

...