gpt4 book ai didi

c# - 正确使用(或不使用)Dispatcher.CheckAccess()

转载 作者:可可西里 更新时间:2023-11-01 07:55:09 27 4
gpt4 key购买 nike

在 Winforms 中,所有控件都有一个 InvokeRequired 属性,如果我必须调用 .[Begin]Invoke 控件以修改它,它会返回 true。

在 WPF 中,DispatcherObject.CheckAccess()Dispatcher.CheckAccess() 中有一个明显相似的构造,但我被 EditorBrowsable( EditorBrowsableState.Never) 属性。当我禁用这样的编辑器浏览时,我用它来表示“你不应该这样做。不,真的。如果这需要解决你眼前的问题,你错误地设计了你的解决方案首要问题。”另一方面,我发现的唯一替代方案(事实上,也是我最初的解决方案)是 Thread.CurrentThread.ManagedThreadId == 1。 (这太可怕了。它在一般情况下不起作用。我知道。不过它确实对我的有限用途有效。)

MSDN documentationEditorBrowsable 属性的存在和背后的原因保持沉默。它确实意味着“不要使用这个”,就像我输入它时那样,还是它有其他一些不那么禁止的意思?

最佳答案

在 WPF 中,无论当前线程如何,您都可以调用 Dispatcher.Invoke,它会相应地处理调用 - 如果您已经在正确的线程上,它只会调用您的代码,它使用 CheckAccess 来处理这种行为。

对于 BeginInvoke,您当前所在的线程是无关紧要的:BeginInvoke 始终是异步的,执行顺序取决于您添加的项目的优先级到调度员的队列。

如果您根本不应该使用该方法,它就不会公开:该属性的目的只是为了从 Intellisense 和其他编辑器-浏览器等机制中隐藏该成员。您通常不需要自己使用 Dispatcher.CheckAccess(),这可能就是它被标记为不可浏览的原因,但我们只能猜测它的智慧(除非 Eric Lippert 是看着 ;-)

总结:只需调用 Dispatcher.Invoke 而不必担心 CheckAccess

关于c# - 正确使用(或不使用)Dispatcher.CheckAccess(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12937902/

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