ワーカースレッドのコードに、UI部品を更新するコードを書く

もくじ
https://tera1707.com/entry/2022/02/06/144447#WinUI3

やりたいこと

画面のスレッドでない処理に、画面の表示更新を行うようなコードを書くと、下記のようなエラーが起きてしまう。

エラーが起きないようにしたい。

やったこと

Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread()を使う。

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

await Task.Run(() =>
{
    dispatcherQueue.TryEnqueue(()=>
    {
        myButton.Content = "ABC";
    });
});

参考

MsDocs
Change CoreDispatcher.RunAsync to DispatcherQueue.TryEnqueue
UWPで使ってたCoreDispatcher.RunAsyncDispatcherQueue.TryEnqueueに直しましょう

https://docs.microsoft.com/en-us/windows/apps/windows-app-sdk/migrate-to-windows-app-sdk/guides/threading#change-coredispatcherrunasync-to-dispatcherqueuetryenqueue

WinUI3ディスパッチャー(デスクトップでWindow.Currentがnullになるのはなぜですか?)

https://github.com/microsoft/microsoft-ui-xaml/issues/2609