2015-08-20 4 views
7

Ich arbeite an einem Benutzersteuerelement für UWP und es aktualisiert einige seiner Visuals bei bestimmten Aufrufen. Da jedoch die Kern-.NET-Bibliothek verschoben wurde und die Threading-Klassen stark eingeschränkt wurden, weiß ich nicht, wie ich anhand der Methode im Benutzersteuerelement ermitteln kann, ob der aufrufende Thread der UI-Thread ist oder nicht ob der Dispatcher eine Abhängigkeitseigenschaft ändern soll oder nicht.Wie kann ich feststellen, ob mein aktueller Thread der UI-Thread ist?

Wer weiß, wie man das macht?

EDIT: Der Dispatcher funktional kann aufgerufen werden async fein auf dem UI-Thread - aber ich weiß wirklich nicht, ob das eine gute Idee ist - zu versuchen, auf den Haupt-Thread aus dem Haupt-Thread über die aufzurufen Dispatcher. Wenn jemand einen Grund hat, dass das gut oder schlecht ist, würde das auch zur Beantwortung der Frage beitragen. Wenn es keinen Grund gibt, den Dispatcher nicht im Hauptthread zu verwenden, dann ist das kein Problem.

+2

möglich duplicate of [Wie man erkennt, ob ein Thread der Hauptthread in C# ist] (http://stackoverflow.com/questions/2374451/how-to-tell-if-a-thread-is-the-main -thread-in-c-sharp) –

+0

Kannst du nicht immer [RunAsync] aufrufen (https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.core.coredispatcher.runasync .aspx)? –

+3

@ X-TECH unwahrscheinlich korrektes Duplikat - beachten Sie das "uwp" -Tag, das die verfügbaren APIs erheblich ändert. –

Antwort

9

ich die Lösung gefunden zu haben ...

CoreDispatcher.HasThreadAccess gibt einen bool angibt, wenn Sie auf dem UI-Thread sind oder nicht.

+0

Es sollte beachtet werden, dass der UI-Thread in einer UWP-App ** nicht ** Hauptthread ist. Es ist einfach, mit dem Debugger zu überprüfen. Ein Haltepunkt im Loaded-Ereignishandler einer Seite zeigt beispielsweise, dass Dispatcher.HasThreadAccess == true ist, und aktueller Thread ist "Worker Thread" mit "No name" und "Managed ID" == 3 – user4698855

+0

Der 'CoreDispatcher' kann Der Zugriff erfolgt über 'CoreWindow.GetForCurrentThread(). Dispatcher'. Nahm mich ein wenig, um zu finden: P – Felix

Verwandte Themen