答えて
使用:あなたのUIスレッドから
は、実行:あなたのバックグラウンド(非UIスレッド)から
var dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
後の両方のCPに取り組むべきであり
dispatcher.RunAsync(DispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
を構築します。
UI以外のスレッドでディスパッチャを取得する方法はありますか?現時点ではCoreWindow.GetForCurrentThread()からnullが返されます。 – Grigory
いいえ。ディスパッチャはUIスレッドに関連付けられているため、UIスレッドでディスパッチャを取得する必要があります。ディスパッチャが取得されると、そのディスパッチャを覚えておくことができます。 XAMLアプリケーションを使用している場合、ほとんどのUIオブジェクトには使用できるディスパッチャメンバがあります。 –
私のアプリのどの部分がUIスレッドで実際に動作していますか? FrameWorkView(Windows :: ApplicationModel :: Core :: IFrameworkView)を使用していて、Run()メソッドから取得したディスパッチャを使用できません。私はRunAsyncを介してMediaElementを作成しようとしているときにWrongThreadExceptionを取得しています。 – Habba
用途:
this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => Frame.Navigate(typeof(Welcome), this));
それは私のために動作します。
これは実際にUIスレッドで実行することは実際には保証されません。これは、 "this"がUIコンテキスト内のオブジェクトである場合のみです。 – Luke
これは私の考えではるかに簡単な方法です。
UIに関連付けられたTaskSchedulerを取得します。
var UISyncContext = TaskScheduler.FromCurrentSynchronizationContext();
次に、新しいタスクを開始し、上記のUISyncContextで開始します。
Task.Factory.StartNew(() => { /* Do your UI stuff here; */}, new System.Threading.CancellationToken(), TaskCreationOptions.PreferFairness, UISyncContext);
それは直接非UIスレッドからCoreWindowを取得する方が簡単です。 GetForCurrentThread()
またはWindow.Current
がnullを返す場合でも、次のコードはどこでも動作します。
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
例えば:
using Windows.ApplicationModel.Core;
DispatcherTimerもオプションです:
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
});
あなたはWindows.ApplicationModel.Core
名前空間を参照する必要があります。
私は(...、CoreWindow.Dispatcher UWP-デザイナでは使用できません)XAML-デザイナーで実行されなければならないコードのためにそれを使用
var localTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(0)
};
localTimer.Tick += (timer, e) =>
{
(timer as DispatcherTimer).Stop();
action();
};
localTimer.Start();
免責事項:
私は、これがなければならないことに注意してください他のすべてが失敗した場合、最後の手段となります。
UWPでは、CaptureElementコントロールのSourceプロパティ(XAMLで定義されています)を設定しようとして問題が発生しました。別のスレッドで準備されているという不満がありました。 Page_Loadedイベントハンドラを介して呼び出されます。
previewControl.Dispatcher.TryRunAsync(CoreDispatcherPriority.Normal,() => {
previewControl.Source = _mediaCapture;
}).GetAwaiter().GetResult();
- 1. UI以外のスレッドでモーダルダイアログを実行
- 2. ビューからUIスレッドで実行
- 3. C#他のスレッドでコードを実行
- 4. .NETのメインUIスレッド以外のスレッドでUIを実行するにはどうすればよいですか?
- 5. UIスレッドでquartz.netジョブを実行できますか?
- 6. ExpandableListView/SimpleCursorTreeAdapterを使用してUIスレッドでSQLiteクエリを実行
- 7. (メッセージポンプを使用して)uiスレッドでデリゲートを実行します。
- 8. ContentProvider insert()は常にUIスレッドで実行されますか?
- 9. これはUIスレッドで実行します
- 10. WinRTのUI文化を変更する
- 11. スレッドの実行
- 12. UIスレッドで長いプロセスを実行し、進行状況を報告するためにUIを更新する
- 13. AwaitがUIスレッドで実行されなかった後のコードはなぜですか?
- 14. Objective C(Cocoa)スレッド(iOS用)でCコードを実行
- 15. Microsoftテストマネージャーでコード化されたUIテストを実行
- 16. UIメッセージポンプと実行コードの両方を実行していますか?
- 17. スレッド上でEventHandlerを実行
- 18. コードがバックグラウンドスレッドまたはUI(Dispatcher)スレッドで実行されているかどうかを検出する
- 19. スレッド実行タイミング
- 20. XAML WinrtでスペースなしでTextBlock内で実行するには?
- 21. 同時スレッド実行の実行
- 22. Silverlight UIスレッドで、InvokeAsyncを実行すると何が起こりますか?
- 23. UIスレッドでタスクを実行しないようにする方法
- 24. UIスレッド
- 25. スレッドのリストを実行し
- 26. PhonegapプラグインのUIスレッドで実行されているダイアログにアクセスする
- 27. 実行コードをブロックせずにブロックUIを表示するShowDialog
- 28. スレッドのUIコンテナ?
- 29. MVC3アプリケーションでのコード実行の実行
- 30. スレッド#実行とスレッド#ウェイクアップの違いは?
将来の読者への注意:アプリケーションに複数のウィンドウがある場合は、複数のUIスレッドとディスパッチャが存在することを覚えておいてください。 –