首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么InvokeRequired和Dispatcher.CheckAccess的布尔值倒置?

为什么InvokeRequired和Dispatcher.CheckAccess的布尔值倒置?
EN

Stack Overflow用户
提问于 2012-03-16 10:27:39
回答 2查看 921关注 0票数 2

我正在将使用InvokeRequired的VB表单代码转换为C# WPF。

代码语言:javascript
运行
复制
// VB
If Me.InvokeRequired Then
   MessageBox.Show("Apple")
Else
   MessageBox.Show("Orange")
End If

VB代码返回"Apple

代码语言:javascript
运行
复制
// C#
if (this.Dispatcher.CheckAccess())
{
   MessageBox.Show("Apple");
}
else
{
   MessageBox.Show("Orange");
}

但是我的C#代码返回"Orange

C#的CheckAccess不是和VB的InvokeRequired相同吗?为什么布尔值是倒的?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-16 10:42:48

Dispatcher.CheckAccess()检查是否与线程相关联,在本例中为false。

InvokeRequired检查是否需要与线程相关联,在本例中为真。

当不与特定线程关联时,需要调用(InvokeRequired == true)。换言之,所需调用的逻辑定义是:

代码语言:javascript
运行
复制
InvokeRequired = !Dispatcher.CheckAccess() 

如果无法访问特定线程,则需要调用。

票数 4
EN

Stack Overflow用户

发布于 2012-03-16 10:30:04

我猜这是说InvokeRequired意味着您需要在GUI线程上调用,而CheckAccess则检查当前线程是否有访问该GUI的权限,如果有访问权限,将返回true

用这种方式更改命名方式似乎有点令人困惑。

NB.C#具有Windows.FormsInvokeRequired属性

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9735583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档