如何查找UWP UI线程

问题描述 投票:9回答:1

我想了解在UWP如何线程作品。

我拥有的知识是:

1)每个应用程序窗口将具有UI线程。而很多工人(或背景)线程。

2)UI元素只能通过UI线程访问。人能做到在后台线程所有内存密集型计算和刚分配值到UI线程保持UI响应。

对于这一点,CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(()=>方法)被使用。

3)检查是否线程是UI线程或非UI线程,CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess都可以使用。(如所提到的here

但,

当我尝试使用CoreApplication.MainView.CoreWindow.Dispatcher.HasThreadAccess,它在大多数情况下,返回真。(即使从工作线程类别)

此外,虽然在调试线程窗口,在类别列有它只有一个线程,如下所示主线程:

enter image description here

编辑:我的同事说,如果名称是工作线程则其非GUI线程。

当我使用Observable.Start(从System.Reactive),而不是Task.Run,​​我得到两个这样的情况下(没有名称),这颠覆一个UI线程每个窗口概念:(

enter image description here

问题是,

我怎么能找到从列表中的一个UI线程? or..Is主线程UI线程?(但其管理的ID为0)

对上述问题的任何信息将是非常有帮助!

c# multithreading asynchronous uwp system.reactive
1个回答
0
投票

(2)在张贴,使用调度运行异步不创建工作(线程池)的任务。它创建的调度上下文,它是只包含UI线程上下文的新课题。

需要注意的是异步和线程是不同的概念。通过调度运行异步创建任务异步,但在同一个线程中运行。这可能是为什么HasThreadAccess被返回true。

要创建一个工作者(线程池)线程任务,你可以使用Task.Run。注意线程池的上下文有多个线程,这些可以被分配到不同的处理器,所以它可能是两个任务可以在同一时间运行。因此,锁定一些公司(如SemaphoreSlim)往往需要。

SJB

© www.soinside.com 2019 - 2024. All rights reserved.