Как получить DispatcherQueue в WinUI 3 Desktop с помощью Windows App SDK

В WPF все элементы управления наследуют DispatcherObject, и его легко получить в Dispatcher.

Как мне получить DispatcherQueue с помощью WinUI 3 Windows App SDK и использовать его в ViewModel?

3 ответа

Позвоните DispatcherQueue.GetForCurrentThread()API в потоке диспетчера.

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

Если вы создаете свои модели представления в фоновом потоке, вам придется внедрить их с помощью DispatcherQueueкоторый вы создаете ранее в реальном потоке диспетчера, например:

      DispatcherQueue dispatcherQueue = DispatcherQueue.GetForCurrentThread();

Task.Run(() => 
{
    ViewModel vm = new ViewModel(dispatcherQueue);
    ...
});

Я могу понять вашу боль при использовании WINUI-3. Если вы находитесь в threadworkerPool и хотите вернуться к основному потоку, Dispatcher не будет поддерживаться WINUI-3 на данный момент. Вместо этого используйте

      Microsoft.UI.Dispatching.DispatcherQueue.TryEnqueue(() => {
         Your code 
    });   

Я потратил много времени на это. В последнее время я получил это, надеюсь, это сработает и для вас.

Да, получение DispatcherQueue отличается от WPF, это как-то так в WinUI3:

      var dispatcherQueue = Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();

После этого вы можете использовать метод TryEnqueue .

Другие вопросы по тегам