development

Windows 스토어 앱에서 CoreDispatcher를 가져 오는 올바른 방법

big-blog 2020. 9. 24. 08:02
반응형

Windows 스토어 앱에서 CoreDispatcher를 가져 오는 올바른 방법


Windows 스토어 앱을 구축 중이며 UI 스레드에 게시해야하는 코드가 있습니다.

이를 위해 CoreDispatcher를 검색하여 코드를 게시하는 데 사용하고 싶습니다.

이를 수행하는 몇 가지 방법이있는 것 같습니다.

// First way
Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher;

// Second way
Window.Current.Dispatcher;

어느 것이 맞습니까? 또는 둘 다 동등하다면?


이것이 선호되는 방법입니다.

Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
    // Your UI update code goes here!
});

이것이 갖는 장점은 메인을 얻으 CoreApplicationView므로 항상 사용할 수 있다는 것입니다. 자세한 내용은 여기를 참조 하세요 .

사용할 수있는 두 가지 대안이 있습니다.

첫 번째 대안

Windows.ApplicationModel.Core.CoreApplication.GetCurrentView().CoreWindow.Dispatcher

이것은 앱에 대한 활성보기를 가져 오지만 활성화 된보기가없는 경우 null 을 제공합니다 . 자세한 내용은 여기를 참조 하세요 .

두 번째 대안

Window.Current.Dispatcher

이 솔루션은 UI Dispatcher 대신 null반환하므로 다른 스레드에서 호출 될 때 작동하지 않습니다 . 자세한 내용은 여기를 참조 하세요 .


C ++ / CX를 사용하는 모든 사람

Windows::ApplicationModel::Core::CoreApplication::MainView->CoreWindow->Dispatcher->RunAsync(
    CoreDispatcherPriority::Normal,
    ref new Windows::UI::Core::DispatchedHandler([this]()
{
    // do stuff
}));

await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
            CoreDispatcherPriority.Normal,
            () => { // your code should be here});

실제로 나는 이것의 라인에서 무언가를 제안 할 것입니다.

return (Window.Current == null) ? 
    CoreApplication.MainView.CoreWindow.Dispatcher : 
    CoreApplication.GetCurrentView().CoreWindow.Dispatcher

이렇게하면 다른보기 / 창을 열면 Dispatcher가 혼란스럽지 않습니다.

이 작은 보석은 창이 있는지 확인합니다. 없는 경우 MainView의 디스패처를 사용하십시오. 보기가 있으면 해당 Dispatcher를 사용하십시오.

참고 URL : https://stackoverflow.com/questions/16477190/correct-way-to-get-the-coredispatcher-in-a-windows-store-app

반응형