我一直在我正在处理的几个程序中进行线程化工作,并且我一直对某些东西到底在做什么感到好奇。
以下面的代码为例,它从一个线程运行以更新 UI:
Public Sub UpdateGrid()
If Me.InvokeRequired Then
Me.Invoke(New MethodInvoker(AddressOf UpdateGrid))
Else
DataGridView1.DataSource = dtResults
DataGridView1.Refresh()
btnRun.Text = "Run Query"
btnRun.ForeColor = Color.Black
End If
End Sub
Me.InvokeRequired 到底检查了什么,Me.Invoke 到底在做什么?我知道它以某种方式让我可以访问 UI 上的项目,但它是如何实现的呢?
顺便说一句,假设 UpdateGrid() 是一个返回值并具有必需参数的函数。调用 Me.Invoke 方法后如何传递参数以及如何获取返回值?我在没有参数的情况下尝试了这个,但没有返回任何东西,我不知道在调用时如何附加参数。