3

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

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每次检查的目的吗?

4

1 回答 1

6

您只需要检查InvokeRequired您在哪里使用多线程,并且需要将更新编组回 UI 线程。

我认为在任何地方都使用它可能不是一个好主意,因为您应该定义和理解您的线程模型,因此确切地知道线程边界在哪里以及需要此检查的点。

如果您在任何地方都随意使用它们,您基本上是在说“我不知道这是否只会由 UI 线程调用”并且(假设您实际上确实有多个线程)将导致调试痛苦的世界发现你错过了一点,或者结果执行了其他非线程安全的代码。

于 2013-01-25T08:42:04.593 回答