Как получить 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 .