반응형
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를 사용하십시오.
반응형
'development' 카테고리의 다른 글
$ _SERVER [ 'REMOTE_ADDR']을 신뢰하는 것이 안전합니까? (0) | 2020.09.24 |
---|---|
루프 중에 TextBox.Text에 추가하면 반복 할 때마다 더 많은 메모리를 차지하는 이유는 무엇입니까? (0) | 2020.09.24 |
JsonMappingException : START_ARRAY 토큰에서 벗어남 (0) | 2020.09.24 |
git : 치명적 이메일 주소를 자동 감지 할 수 없음 (0) | 2020.09.24 |
Swift : 스위치 케이스의 옵션 값에 대한 테스트 (0) | 2020.09.24 |