none
richtextbox no funciona con backgroundworker RRS feed

  • Debate general

  • Buen dia.....

    Tengo el siguiente codigo y espero me puedan ayudar, estoy tratando de realizarlo en segundo plano, he utilizado backgroundworker y me tira un error en el control richtextbox que he llamado codigo, la funcion es leer el contenido del richtextbox para procesarlo y luego enviar los resultados por puerto serial, aun no creo el puerto estoy ensayando que este codigo me corra en segundoplano para poder utilizar luego botones para pausar o salir de esa rutina

    codigo:

     

    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork Dim dato As String codigo.HideSelection = False For l As Integer = 4 To codigo.Lines.Length - 1 If Button8.Text = "Entrar" Then Exit Sub codigo.SelectionStart = codigo.GetFirstCharIndexFromLine(l) codigo.SelectionLength = codigo.Lines(l).Length dato = codigo.SelectedText If codigo.SelectedText = Nothing Then Exit For 'rutinas de lectura y envio Dim cadena As String() = dato.Split(New [Char]() {"X", "Y", "Z"}) If cadena.LongLength > 2 Then x = Replace(cadena(1), ".", ",") * 10 y = Replace(cadena(2), ".", ",") * 10 TextBox2.Text = x & " " & y Else z = Replace(cadena(1), ".", ",") * 10 End If System.Threading.Thread.Sleep(1000) Next End Sub


    he utilizado esta sentencia pero el richtextbox se cuelga

      Control.CheckForIllegalCrossThreadCalls = False

    Porfa ayuda.......

    • Cambiado Enrique M. Montejo sábado, 15 de agosto de 2015 20:50 Pregunta relacionada con controles de Windows Forms,
    miércoles, 12 de agosto de 2015 9:07

Todas las respuestas

  • Hola,

    Lo que te puedo sugerir es que esa rutina la pases a un procedimiento dentro del mismo formulario y ejecutar el procedimiento con el método BeginInvoke dentro del evento DoWork del BackgroundWorker.

     Private Sub Leer()
    
            Dim Richtextbox As New RichTextBox
            Richtextbox = Me.codigo
    
            Dim textbox As New TextBox
            textbox = Me.TextBox2
    
            Dim dato As String
    
            Richtextbox.HideSelection = False
    
            For l As Integer = 4 To Richtextbox.Lines.Length - 1
    
                If Richtextbox.Text = "Entrar" Then Exit Sub
    
                Richtextbox.SelectionStart = Richtextbox.GetFirstCharIndexFromLine(l)
    
                Richtextbox.SelectionLength = Richtextbox.Lines(l).Length
    
                dato = Richtextbox.SelectedText
    
                If Richtextbox.SelectedText = Nothing Then Exit For
    
                'rutinas de lectura y envio
    
                Dim cadena As String() = dato.Split(New [Char]() {"X", "Y", "Z"})
    
                If cadena.LongLength > 2 Then
                    x = Replace(cadena(1), ".", ",") * 10
                    y = Replace(cadena(2), ".", ",") * 10
                    Richtextbox.Text = x & "  " & y
                Else
                    z = Replace(cadena(1), ".", ",") * 10
                End If
                System.Threading.Thread.Sleep(1000)
            Next
    
        End Sub
    
        Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
            BeginInvoke(New MethodInvoker(AddressOf Leer))
        End Sub

    Saludos y me cuentas como te fue.


    Saludos desde Chile.

    miércoles, 12 de agosto de 2015 19:43