Guten Abend there ^^
ich stehe vor einem Problem womit ich mich bereits mehrere Abende mit
beschäftigt habe. Die vielen MSDN-Seiten und Links in der Suchmaschine
ergaben auch keine Erfolge.
Es geht um ein Dialogfenster das als ShowDialog angezeigt wird. Dieser
wiederum öffnet einen seriellen Port und erzeugt das dazugehörige
EventHandler zum empfangen der Daten. Daten werden empfangen, alles gut.
Nach dem Empfangen der Daten möchte ich den Port schließen und das
Dialogfenster schließen. Beim Versuch des Schließens vom Dialogfenster
erfolgt der Laufzeitfehler:
1 | System.ObjectDisposedException: "Auf das verworfene Objekt kann nicht zugegriffen werden.
|
2 | Objektname: "Dialog2"."
|
Mir ist klar dass dies ein threadübergreifender Fehler
höchstwahrscheinlich ist. Habe bereits vieles versucht. Habe Invokes
benutzt und was das I-Net noch zu bieten hatte. Schaut ma bitte drüber.
LG Thomas
1 | Public Class Dialog2
|
2 |
|
3 | Dim mySerialPort As New SerialPort("COM6")
|
4 |
|
5 | Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
|
6 | Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
|
7 | CloseMe()
|
8 | End Sub
|
9 |
|
10 | Private Sub Dialog2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
11 | Serial_Port()
|
12 | mySerialPort.Open()
|
13 | End Sub
|
14 |
|
15 | Private Sub Dialog2_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
|
16 | mySerialPort.Close()
|
17 | End Sub
|
18 |
|
19 | Private Sub CloseMe()
|
20 | If Me.InvokeRequired Then
|
21 | Me.Invoke(New Action(AddressOf Me.Close))
|
22 | Exit Sub
|
23 | End If
|
24 | Me.Close()
|
25 | End Sub
|
26 |
|
27 | Public Sub Serial_Port()
|
28 | mySerialPort.BaudRate = 9600
|
29 | mySerialPort.Parity = Parity.None
|
30 | mySerialPort.StopBits = StopBits.One
|
31 | mySerialPort.DataBits = 8
|
32 | mySerialPort.Handshake = Handshake.None
|
33 | mySerialPort.RtsEnable = True
|
34 | mySerialPort.NewLine = vbCr
|
35 |
|
36 | AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler
|
37 |
|
38 | End Sub
|
39 |
|
40 |
|
41 | Public Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
|
42 | Dim sp As SerialPort = CType(sender, SerialPort)
|
43 | PubVar.RFID_Data = sp.ReadLine 'PubVar ist ein Modul die die String-Variable RFID_Data enthält
|
44 | Me.DialogResult = System.Windows.Forms.DialogResult.OK
|
45 | If PubVar.RFID_Data IsNot Nothing Then
|
46 | Me.mySerialPort.Close()
|
47 | Me.CloseMe()
|
48 | End If
|
49 | End Sub
|
50 |
|
51 | End Class
|