gpt4 book ai didi

c# - WPF 中的调度程序与线程的关系

转载 作者:IT王子 更新时间:2023-10-29 04:26:50 26 4
gpt4 key购买 nike

我并不完全清楚一个应用程序中有多少 Dispatcher,以及它们如何与 Threads 相关或从 Threads 引用。

据我了解,一个 WPF 应用程序有 2 个线程(一个用于输入,另一个用于 UI)和 1 个调度程序(与 UI 线程关联)。如果我创建另一个线程 - 让我们称之为“工作线程” - 当我在工作线程上调用 Dispatcher.CurrentDispatcher 时,我会得到哪个调度程序?

另一种情况:假设一个控制台应用程序有 2 个线程——主线程和输入线程。在主线程上,我首先创建输入线程,然后调用 Application.Run()

Thread thread = new Thread(new ThreadStart(UserInputThreadFunction));
thread.Start();
Application.Run();

会有一个调度员,对吗?在输入线程上,Dispatcher.CurrentDispatcher 是否返回主线程的调度程序?或者将实例获取到主线程的调度程序的正确方法是什么?

难道一个 WPF 应用程序中有多个调度程序?在任何情况下,创建另一个调度程序是否有意义?

最佳答案

WPF application has 2 threads (one for input, the other for UI)

这种说法并不完全正确。 WPF 应用程序只有一个 UI 线程来处理所有 UI 交互和用户输入。还有一个负责渲染的“隐藏”线程,但通常开发人员不会处理它。

Dispatcher/Thread 关系是一对一的,即一个 Dispatcher 总是与一个线程相关联,并且可用于将执行调度到该线程。 Dispatcher.CurrentDispatcher 返回当前线程的调度程序,也就是说,当您在工作线程上调用 Dispatcher.CurrentDispatcher 时,您会获得该工作线程的调度程序。

调度程序是按需创建的,这意味着如果您访问 Dispatcher.CurrentDispatcher 并且没有与当前线程关联的调度程序,则会创建一个。

也就是说,应用程序中的调度程序数总是小于或等于应用程序中的线程数。

关于c# - WPF 中的调度程序与线程的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5015278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com