即使使用Invoke,RichTextBox也不会实时更新

时间:2015-03-06 15:56:05

标签: .net multithreading user-interface invoke

我在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都不会实时更新。

0 个答案:

没有答案