2012-03-02 3 views
0
내 제목이 내가, 내가 시리얼 포트에서 데이터를 다음과 같은 문제를 수신하고 있고 내가 control.invoke 방법하여 SerialPort에

하여 SerialPort 및 제어 업데이트

(코드와 MDI 형태를 RichTextBox를 업데이트 할 수 있듯이

.DataReceived 이벤트)

그러나 mdi 형식으로 닫고 다시 열 수 있습니다. 그래서 직렬 포트가 richtextbox로 데이터를 보내고 사용자가 닫기 버튼을 클릭하면 양식이 삭제됩니다. 그런 다음 "Invoke 또는 BeginInvoke는 창 핸들이 만들어 질 때까지 컨트롤에서 호출 할 수 없습니다."... Any Idea ????

내 관련, Ribben

답변

0

그 코드는 이벤트 핸들러에있는 SerialPort.DataReceived이벤트에 있지 않습니다. (그래, 내가 nitpicking하지만 해결책을 가리킨다.) 가장 좋은 할 일은 myTerminal을 소유하고있는 폼을 만들어 그것이 생성 될 때 처리기를 추가하고 닫을 때 처리기를 제거한다.

0

답장을 보내 주셔서 감사합니다.하지만 불행히도 그것은 해결책이 아닙니다. 우선 SerialPort 클래스는 2 개의 Forms (Richtextbox, Listview가있는 Form)와 그리기를 담당하는 또 다른 클래스 (Unmanaged DirectX 9.0c about 4 Forms)를 알려야합니다. 따라서 직렬 포트 클래스를 구현하려면 자체 이벤트를 만들었습니다 . 다시 problme, 그것은 발생할 때마다 Serialport.DataReceived 스레드 풀에있는 스레드를 생성하고 내가 너무 스레드를 따라 잡기에 너무 느려 양식을 처분하기 때문에 발생했습니다 그래서 적어도 하나의 스레드는 컨트롤을 호출합니다 이미 처분 된! 내가 생각 해낸 임시 솔루션으로

는 (아래 코드는 폼을 상속 TerminalForm 클래스에) :

Private VisibleBoolean As Boolean = False 
Private Index As Integer = 0 

Private Sub DataToAppend(ByVal _text As String) 
    If VisibleBoolean Then 
     Me.MyRichTextBox1.Invoke(New MethodInvoker(Sub() 
                 Me.MyRichTextBox1.AppendText(_text & vbCrLf) 
                End Sub)) 

    ElseIf Index = 1 Then 
     Index = 0 
     myDispose() 
     RemoveHandler myserialport.DataToSend2, AddressOf DataToAppend 

    End If 
End Sub 

Private Sub Me_Activated(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Activated 
    VisibleBoolean = True 
    AddHandler myserialport.DataToSend2, AddressOf DataToAppend 
End Sub 

Private Sub myDispose() 
    If Index = 0 And Not Me.IsDisposed Then 
     Me.Invoke(New MethodInvoker(Sub() 
             MyBase.Dispose(True) 
            End Sub)) 
    End If 
End Sub 

Protected Overrides Sub Dispose(ByVal disposing As Boolean) 

End Sub 

Protected Overrides Sub OnFormClosing(ByVal e As System.Windows.Forms.FormClosingEventArgs) 

    Index = 1 
    VisibleBoolean = False 

End Sub 

나는 나도하지만 적어도이 일하고 좋아하지 않는 것을 알고있다! 기타 개선 사항이나 제안 사항은

입니다.