总是使用Form.Invoke()一个不好的做法?

时间:2013-01-25 08:35:37

标签: .net vb.net winforms delegates invokerequired

我知道,这可能是一个非常简单的问题,但我无法确定。我在一个模块中有这个:

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

1 个答案:

答案 0 :(得分:6)

您只需要检查InvokeRequired多线程的位置,并且需要将更新编组回UI线程。

我认为在任何地方使用它可能是一个好主意,因为你应该定义和理解你的线程模型,因此知道完全线程边界的位置和需要检查的点。

如果你在任何地方自由地喋喋不休,你基本上都在说“我不知道这是否只会被UI线程调用”而且(假设你确实有多个线程)将导致一个调试的世界当您发现错过了某个点或其他非线程安全代码时,您会感到很痛苦。