0
我相信这是一个简单的问题。我从串口读取一些数据,并在一些解析点上,我需要更新一些状态标签。出人意料的是,statuslabel是线程安全的......我不知道......代表函数返回其他线程中的值
好,但statuslabel需要包括似乎不是线程安全的一些组合文本
statLabel1.Text =“连接到” & cmbPort.text &“发现快乐”
于是,我就做一个函数从任何component.text‘读取安全’,但我失败了......
Private Delegate Function ControlGetTextDelegate(ByRef cmp As Control) As String
Public Function ControlGetText(ByRef cmp As Control) As String
Dim s As String = ""
' control invoked from another thread ?
If cmp.InvokeRequired Then ' YES, so call through delegate
Dim dlg As New ControlGetTextDelegate(AddressOf ControlGetText)
cmp.BeginInvoke(dlg, {cmp})
Else ' NO, so call normally
s = cmp.Text
End If
Return s
End Function
能有人给一点点帮帮我?
你摇滚:)非常感谢。我改为s = cmp.Invoke(dlg,{cmp}),并且像魅力一样工作。事实上,我试过,但BeginInvoke不允许返回我的价值。 – user1797147
你能解释一下吗? – user1797147
'BeginInvoke'是异步的,所以它返回'IAsyncResult'。在你的例子中你想要'调用'。或者在事件处理程序中使用'BeginInvoke'。 –