2011-10-12 20 views
5

im próbuje uzyskać dostęp do bogatego tekstowe inną formę im przy użyciu następującego kodu, aby to zrobić:Krzyż operacji wątek nie ważne

Private Delegate Sub StringDelegateChat(text As String, window As ChatWindow) 
    Private Sub AppendTextChatWindows(text As String, window As ChatWindow) 
     Try    
      If window.RichTextBox1.InvokeRequired Then 
       window.Invoke(New StringDelegateChat(AddressOf AppendTextChatWindows), text, window) 
      Else 
       window.RichTextBox1.AppendText(text) 
       window.RichTextBox1.SelectionStart = window.RichTextBox1.Text.Length 
       window.RichTextBox1.ScrollToCaret() 
      End If 
     Catch ex As Exception 
      MessageBox.Show(ex.ToString) 
     End Try 
    End Sub 

ale pojawia się krzyż operacji wątek nie ważne błędu, myślę, że to robi ponieważ pomija część 01 instrukcji if. Próbowałem również zastąpić If window.RichTextBox1.InvokeRequired Then do If InvokeRequired Then, ale zostanie złapany w pętli kontynuacji i zostanie zgłoszony błąd przepełnienia stosu.

Dzięki Houlahan

+0

Wypróbowałem już window.InvokeRequired zamiast window.RichTextBox1.InvokeRequired? –

+0

tak, że po prostu przechodzi do innego, a następnie wyłącza wyjątek:/ – Houlahan

+0

Czy jesteś absolutnie pewien, że uchwyt sterowania został utworzony? Nawet jeśli tak, to nie zaszkodzi podwójnie sprawdzić ... – jmoreno

Odpowiedz

6

wierzę, na linii 5, window.Invoke należy zmienić window.RichTextBox1.Invoke.

Private Delegate Sub StringDelegateChat(text As String, window As ChatWindow) 
Private Sub AppendTextChatWindows(text As String, window As ChatWindow) 
    Try 
     If window.RichTextBox1.InvokeRequired Then 
      window.RichTextBox1.Invoke(New StringDelegateChat(AddressOf AppendTextChatWindows), text, window) 
     Else 
      window.RichTextBox1.AppendText(text) 
      window.RichTextBox1.SelectionStart = window.RichTextBox1.Text.Length 
      window.RichTextBox1.ScrollToCaret() 
     End If 
    Catch ex As Exception 
     MessageBox.Show(ex.ToString) 
    End Try 
End Sub 
0

Nie widzę żadnych błędów w kodzie. Możesz chcieć sprawdzić zdarzenia, które zostaną uruchomione podczas aktualizacji RichTextbox. Mogą powodować poprzeczne przewlekanie.

W ramach obejścia problemu, pracy z obiektami, mniej prawdopodobne jest napotkanie problemów związanych z krzyżowaniem gwintów.

3

Czy próbowałeś:

Private Sub AppendTextChatWindows(text As String, window As ChatWindow) 
     Try    
      If window.RichTextBox1.InvokeRequired Then 
       window.RichTextBox1.BeginInvoke(New StringDelegateChat(AddressOf AppendTextChatWindows), text, window) 
       Exit Sub 
      Else 
       window.RichTextBox1.AppendText(text) 
       window.RichTextBox1.SelectionStart = window.RichTextBox1.Text.Length 
       window.RichTextBox1.ScrollToCaret() 
      End If 
     Catch ex As Exception 
      MessageBox.Show(ex.ToString) 
     End Try 
    End Sub 

Zasadniczo Pytam o BeginInvoke zamiast Invoke. Chociaż spodziewam się, jak wspominał inny plakat, że powinieneś używać tej samej rzeczy, którą sprawdziłeś, aby przeciwnik mógł go przywołać. (tj. oba window.invokeRequired & window.BeginInvoke lub formant)

Powiązane problemy