【发布时间】:2013-03-22 21:55:57
【问题描述】:
我在 vb.net 中有以下代码,我正在将其转换为 c#。 编辑 编辑掉不相关的代码。
但我被困在InvokeRequired 的那个。我添加了对System.Windows.Forms 的引用,但代码完成仍然没有显示InvokeRequired。 listview 与我调用它的线程位于一个单独的线程上,我需要使用 Invoke 来解决这个问题。你能告诉我我错过了什么吗?
谢谢。
Delegate Sub _AddClient(ByVal client As Socket)
Private Sub AddClient(ByVal client As Socket)
If InvokeRequired Then
Invoke(New _AddClient(AddressOf AddClient), client)
Exit Sub
End If
Dim lvi As New ListViewItem(client.LocalEndPoint.ToString)
lvi.Tag = client
lsvClients.Items.Add(lvi)
End Sub
【问题讨论】:
-
您也可以发布您的 C# 代码...如果这是
Form或Control的后代,则应该可以使用InvokeRequired。 -
c# 代码几乎相同,只是我似乎无法让
If InvokeRequired Then Invoke(New _AddClient(AddressOf AddClient), client) Exit Sub End If工作 -
调用
InvokeRequired()的类必须直接或间接派生自类Control才能调用InvokeRequired()。否则,它将需要对可以调用InvokeRequired()的控件的引用。你的类是直接还是间接派生自Control? -
hmmm...实际上没有其他类:(也许我是模棱两可的。上面的整个代码是一个异步服务器。没有其他类在调用它,我只是试图从 Control 和仍然 InvokeRequired 不可用:(
-
更正@MatthewWatson ..我认为你是对的:)它似乎正在工作......即从 Control 派生类后,invokerequired 可用...我现在对其进行测试以查看它是否有效