如何判断当前线程是否为UI线程?

Thi*_*Use 10 c# multithreading windows-10 uwp

我正在为UWP开发一个用户控件,并在某些调用时更新它的一些视觉效果.但是,由于核心.NET库已被转移并且线程类已被严重削减,我不知道如何从用户控件中的方法中识别调用线程是否是UI线程,因此它知道是否使用调度程序更改依赖项属性.

有人知道怎么做吗?

编辑:调度程序在功能上可以在UI线程上"调用"异步 - 但是,我真的不知道这是不是一个好主意 - 尝试通过调度程序从主线程调用主线程.如果有人有理由这是好还是坏,这也有助于回答这个问题.如果没有理由不在主线程上使用调度程序,那么我猜没有问题.

Thi*_*Use 13

我找到了解决方案......

CoreDispatcher.HasThreadAccess返回一个bool,指示您是否在UI线程上.

  • 可以通过`CoreWindow.GetForCurrentThread().Dispatcher`访问`CoreDispatcher`.我花了一会儿找到:P (3认同)
  • 应该注意的是,在UWP应用程序中,UI线程不是**主线程.使用调试器很容易检查.例如,页面的Loaded事件处理程序中的断点显示Dispatcher.HasThreadAccess == true,当前线程为"Worker Thread","No name"和"Managed ID"== 3 (2认同)