我在Visual Studio 2013中使用vb .NET。我有一个RichTextBox,我正在使用它像一个控制台。我希望它自动更新,但只有在应用程序完成后才会更新。所以我尝试使用invoke,但它仍然没有更新。
Private Sub AddTextToConsole(text As String)
ConsoleText = text
If rtbConsole.InvokeRequired = True Then
rtbConsole.Invoke(New MethodInvoker(AddressOf test))
Else
rtbConsole.Invoke(New MethodInvoker(AddressOf test))
'rtbConsole.AppendText(ConsoleText)
'rtbConsole.SelectionStart = rtbConsole.Text.Length
'rtbConsole.ScrollToCaret()
End If
End Sub
Private Sub test()
' MsgBox(ConsoleText)
rtbConsole.AppendText(ConsoleText)
rtbConsole.SelectionStart = rtbConsole.Text.Length
rtbConsole.ScrollToCaret()
End Sub
奇怪的是InvokeRequired总是返回false。所以我尝试评论了else部分并用另一个调用替换它。它进入test()但在应用程序完成之前仍然不会更新。我尝试在test()中使用msgbox,然后实时更新所有文本(如预期的那样)。
我还尝试过像互联网一样的其他一些例子
Dim mi As MethodInvoker = AddressOf test
Me.Invoke(mi)
End Sub
但无济于事。无论我做什么,rtbConsole都不会实时更新。