我正在将使用InvokeRequired
的VB表单代码转换为C#WPF
// VB
If Me.InvokeRequired Then
MessageBox.Show("Apple")
Else
MessageBox.Show("Orange")
End If
VB代码返回“ Apple ”
// C#
if (this.Dispatcher.CheckAccess())
{
MessageBox.Show("Apple");
}
else
{
MessageBox.Show("Orange");
}
但我的C#代码返回“ Orange ”
C#的CheckAccess
与VB Formc的InvokeRequired
不一样吗?为什么布尔值被反转?
答案 0 :(得分:4)
Dispatcher.CheckAccess()
检查你是否与线程相关联,在我们的例子中是假的。
InvokeRequired
检查你是否需要与线程相关联,在我们的例子中是真的。
当您与特定线程无关时,您需要调用(InvokeRequired == true
)。换句话说,所需调用的逻辑定义是:
InvokeRequired = !Dispatcher.CheckAccess()
如果您无权访问特定线程
,则需要调用答案 1 :(得分:1)
我想这是说InvokeRequired
意味着您需要调用GUI线程,而CheckAccess
正在检查当前线程是否可以访问GUI并且如果确实存在则返回true
有权访问。
以这种方式更改命名似乎有点令人困惑。
<强> NB 即可。 C#具有InvokeRequired
Windows.Forms
属性