フォロー

C#、処理を
var task = Task.Run(() => { /*処理*/ }
で囲って、UIにアクセスする時だけ
App.Current?.Dispatcher.Invoke((Action)(() => { /*UI処理*/ }));
ってするだけで、むっちゃ動きが速くなる、たまにおかしくなるので注意

UIスレッドの奪い合いが起きるからね。Task.Run()にすれば確かに抜けられるが…UIの操作とは別に処理が走るのでタイミングによって想定外の結果になるというのは普通に起きる。
UIから呼ぶ処理ならawait Task.Run()とでもした方がまだ無難。これだけでもUIスレッドは空くし、自分でDispatcher.InvokeしなくてもUIスレッドに帰ってくる。

@204504bySE await Task.Run() にするなら、メソッドを async にしなきゃですよね?この辺よく解ってないのですorz

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。