Nab*_*sof 2 vb.net visual-studio
我对 vb.net 很陌生,并且使用不同的线程,所以我不完全知道如何使用调用方法。我基本上想将 selected_item 指定为用户从 UI 线程在组合框中选择的项目。
Dim selected_item As String
If ComboBox1.InvokeRequired Then
selected_item = ComboBox1.Invoke(ComboBox1.SelectedItem)
Else
selected_item = ComboBox1.SelectedItem
End If
Run Code Online (Sandbox Code Playgroud)
我收到错误跨线程操作无效。我怎样才能解决这个问题?
调用时,Invoke您需要指定在 UI 线程上调用的方法。如果您想获取一个值,该方法必须返回该值,然后Invoke在辅助线程上返回相同的值。在你的情况下:
Private Function GetComboBox1SelectedItem() As Object
If ComboBox1.InvokeRequired Then
Return ComboBox1.Invoke(New Func(Of Object)(AddressOf GetComboBox1SelectedItem))
Else
Return ComboBox1.SelectedItem
End If
End Function
Run Code Online (Sandbox Code Playgroud)
然后,您可以在任何线程上调用该GetComboBox1SelectedItem方法,它将返回当前选定的项目。
如果您在辅助线程上调用该方法,InvokeRequired则True执行将进入该If块。在该块中,该Invoke方法创建一个委托,将其编组到 UI 线程并调用它。该委托用于相同的方法,因此它会被第二次执行。第二次,我们位于 UI 线程上,并且InvokeRequired执行False进入Else块。在该块中,Selecteditem检索并返回 。然后,该Invoke方法返回该方法的第二个实例返回的值以及第一个实例返回的值。
您可能想阅读本文,以获得有关如何构建此类方法及其实际用途的更严格的解释。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |