【发布时间】:2013-01-25 08:35:37
【问题描述】:
我知道,这可能是一个非常简单的问题,但我不能确定。我在一个模块中有这个:
Public theHandle As IntPtr
这在我的名为 Form1 的主窗体中:
Private Sub Form1_HandleCreated(sender As Object, e As System.EventArgs) Handles Me.HandleCreated
theHandle = Me.Handle
End Sub
我有许多其他类、模块和线程,并且没有使用InvokeRequired,我使用它来从任何地方调用委托。我的意思是来自其他线程、类、模块等。
DirectCast(Form1.FromHandle(theHandle), Form1).Invoke(D_Calculate)
代替:
D_Calculate.Invoke()
这是一种不好的做法吗?真的有每次检查InvokeRequired 的目的吗?
【问题讨论】:
-
为什么要缓存句柄?有时可以重新创建它。只需存储表单引用。作为一个适当的只读属性。
-
我不知道。谢谢你。在什么情况下会重新创建?
-
不知道该列表,但可能在设置某些属性(Border、MDIxxx、...)时出现。但是 HandleCrerated 会触发,所以你的代码是安全的。只是不必要的复杂。
-
C# 不做 DirectCast 等。我出于充分的理由删除了该标签。
-
重点不是 DirectCast。我认为任何对 .NET 和线程有深入了解的人都可以回答这个问题。我猜任何了解 C# 的人都可以理解这种简单的 VB 代码。
标签: .net vb.net winforms delegates invokerequired