我想公开一种方法,用消息作为状态日志更新文本框。我想使用AppendText方法,但我在使用它时遇到了一个奇怪的多线程问题。我可以通过串联附加新邮件就好了。该问题表明它自己没有显示文本框,然后在关闭表单时显示交叉线程访问错误。以下是有效和无效的示例:
工作但不像AppendText,除非采取额外的步骤,这是最后的手段:
Public Sub AddMessage2(ByVal newMessage As String)
If TextBoxStatus.InvokeRequired Then
TextBoxStatus.BeginInvoke(Sub() TextBoxStatus.Text = TextBoxStatus.Text & newMessage & ControlChars.CrLf)
Else
TextBoxStatus.Text = TextBoxStatus.Text & newMessage & ControlChars.CrLf
End If
End Sub
我想使用但不起作用:
Public Sub AddMessage(ByVal newMessage As String)
If TextBoxStatus.InvokeRequired Then
TextBoxStatus.BeginInvoke(Sub() TextBoxStatus.AppendText(newMessage))
Else
TextBoxStatus.AppendText(newMessage)
End If
End Sub
其他信息和更新: 首先,我很抱歉可能没有提供足够的信息。
至少部分问题似乎是在调用AddMessage(newMessage)
之前实例化表单并调用Show()
,因为以下代码有效:
Public Sub AddMessage(ByVal newMessage As String)
If Me.Created Then
If TextBoxStatus.InvokeRequired Then
TextBoxStatus.BeginInvoke(Sub() TextBoxStatus.AppendText(newMessage))
Else
TextBoxStatus.AppendText(newMessage)
End If
End If
End Sub
我总是会做类似以下的事情,但我想继续做些什么:)
Private backLog As String = ""
Public Sub AddMessage(ByVal newMessage As String)
If Me.Created Then
If TextBoxStatus.InvokeRequired Then
TextBoxStatus.BeginInvoke(Sub() TextBoxStatus.AppendText(backLog & newMessage))
Else
TextBoxStatus.AppendText(backLog & newMessage)
End If
backLog = ""
Else
backLog &= newMessage
End If
End Sub
此外,我并不认为这非常优雅...尤其是当我添加日志大小限制时
答案 0 :(得分:0)
我会建议:
Public Sub AddMessage(ByVal newMessage As String)
If TextBoxStatus.InvokeRequired Then
TextBoxStatus.BeginInvoke(New Action(Of String)(AddressOf AddMessage), newMessage)
Else
TextBoxStatus.AppendText(newMessage)
End If
End Sub