假设我有以下sub,只是将传递的项添加到ListView控件:
Private Sub AddListItem(ByVal item As ListViewItem)
UIList.Items.Add(item)
End Sub
我在BackgroundWorker线程中使用它,如下所示:
UIList.BeginInvoke(Sub() AddListItem(lvItem))
很明显,我刚刚发现似乎无关紧要哪个控件用于调用Invoke\BeginInvoke
方法,或者即使我完全省略了一个控件只是直接调用方法 - 我假设在幕后使用Me.<Method>
- 这似乎并不重要。代码仍然有效。
那么,使用受影响的控件来调用方法只是为了让代码更容易理解吗?其他优点是什么?当使用不同的控件时,是否需要注意某些陷阱?
答案 0 :(得分:1)
使用ILSpy并挖掘Control.Invoke
method,摘录为
...
UnsafeNativeMethods.PostMessage(
new HandleRef(this, this.Handle),
Control.threadCallbackMessage,
IntPtr.Zero,
IntPtr.Zero);
...
此外,MSDN states:
Invoke方法搜索控件的父链,直到它为止 找到一个控件或窗体,如果是当前窗口句柄 控件的底层窗口句柄尚不存在。如果不 可以找到合适的句柄,Invoke方法会抛出一个 例外。通话期间提出的例外情况将是 传播回呼叫者。
所以通常你发布哪个控件并不重要。
就个人而言,我使用“最近”的控件来调用Invoke
方法。