gpt4 book ai didi

c# - 检查线程是否在 Gui 上下文中

转载 作者:太空狗 更新时间:2023-10-29 23:11:02 25 4
gpt4 key购买 nike

如何检查当前运行的线程是否在 GUI 上下文中?

最佳答案

不幸的是,很难 100% 准确地回答这个问题,因为 GUI 上下文的构成并不总是很明显。它比是/否的答案更像是一种启发式的。每个 GUI 框架的启发式方法都不同。

对于 WPF,一个好的方法是检查当前线程是否有事件的 Dispatcher

public static bool IsWpfGuiThread() {
return Dispatcher.FromThread(Thread.CurrentThread) != null;
}

然而,这可以通过在随机线程上设置一个 Dispatcher 而不是在其上实际放置 GUI 来愚弄。

对于 WinForms,一个好的检查是当前的 SynchronizationContext

public static bool IsWinFormsGuiThread() {
return SynchronizationContext.Current is WindowsFormsSynchronizationContext;
}

然而,这可能会被临时(或更长时间)将 Current 值重置为另一个同步上下文的人所愚弄。这本质上只是一个全局线程,任何人都可以设置。在某些应用程序(如 Visual Studio)中更改它实际上是相当普遍的(但这是一个 WPF 应用程序)

关于c# - 检查线程是否在 Gui 上下文中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4320461/

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