IOException sur serialPort.Write()
Bonjour,
Dans mon application, j'ai actuellement deux winforms. Une winform où j'ai deux champs à remplir que je vais appeler ici Win1 et une autre fenêtre de "test" avec un témoin de connexion bluetooth que j’appellerais Win2. Pour réaliser mon témoin de la Win2, j'ouvre le serialPort et j'envoi une chaîne de caractères, l'appareil client reçoit et me réponds. Si je reçois la réponse, c'est que tout est ok. Je répète donc ce processus toutes les 10 secs via un Thread qui fonctionne uniquement si je load mon code directement sur la Win2.
Maintenant si je load mon code sur la Win1, je remplis mes champs, je click sur mon bouton pour aller sur la Win2 et la le Thread ne fonctionne pas et il y a une erreur sur la ligne serialPort.Write() : L’opération d’entrée/sortie a été abandonnée en raison de l’arrêt d’un thread ou à la demande d’une application.
Je ne comprends pas pourquoi. Avez-vous une idée ?
Je vous met ci-dessous les morceaux de code.
Code Win1 :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
Public Class Bus_Properties
Public b_id As String
Public bus_prog As Integer
Private Sub Quit_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Quit_Btn.Click
Me.Close()
Login.Close()
End Sub
Private Sub Next_Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Next_Btn.Click
If Bus_ID.Text = "" Then
MsgBox("Please fill all fields", vbExclamation)
Else
b_id = Bus_ID.Text
Me.Close()
Login.Close()
Test_Window.Show()
End If
End Sub
Private Sub Bus_Properties_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Next_Btn.Enabled = True
Login.Hide()
Login_Recap_label.Text = "You're identified as " + Login.noun + Login.first_name
Dim filesNames = My.Computer.FileSystem.GetFiles("chemindudossier", FileIO.SearchOption.SearchTopLevelOnly, "*.vb")
For Each filename As String In filesNames
filename = Mid(filename, 50)
filename = Microsoft.VisualBasic.Left(filename, InStr(filename, ".") - 1)
Bus_type.Items.Add(filename)
Next
End Sub
Private Sub Bus_type_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bus_type.SelectedIndexChanged
bus_prog = Bus_type.SelectedIndex
End Sub |
Code Win2:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
Public Class Test_Window
Dim step_list(3) As String
Dim properties As Bus_Properties
Dim choice_bus As Integer
Dim boucle As Boolean = True
Dim checkBT_thread As New Thread(AddressOf checkBT)
Private Sub Test_Window_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
BT_pict.Image = Image.FromFile("chemin\BT_on.png")
BluetoothPort.Open()
checkBT_thread.Start()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Dim Choice As Integer
Choice = MsgBox("Do you want to really cancel the test in progress?", vbYesNo + vbExclamation, "Careful")
If Choice = vbYes Then
BluetoothPort.Close()
Me.Close()
checkBT_thread.Abort()
End If
End Sub
Private Sub checkBT()
Dim buffer As String
While boucle
BluetoothPort.Write("Test")
buffer = BluetoothPort.ReadExisting()
If buffer = "Recu" Then
ChangeStateWitness("chemin\BT_on.png")
ElseIf buffer = "" Then
ChangeStateWitness("chemin\BT_off.png")
End If
checkBT_thread.Sleep(10000)
End While
End Sub
Private Sub ChangeStateWitness(ByVal [Text] As String)
If Me.BT_pict.InvokeRequired Then
Dim d As New ContextCallback(AddressOf ChangeStateWitness)
Me.Invoke(d, New Object() {[Text]})
Else
Me.BT_pict.Image = Image.FromFile(Text)
End If
End Sub
Sub WriteInLog(ByVal StMess)
Const ForWriting = 2
Dim oFso, f
oFso = CreateObject("Scripting.FileSystemObject")
f = oFso.OpenTextFile("chemin\log.txt", ForWriting, True)
f.writeLine(Now & " : " & StMess)
f.Close()
End Sub
End Class |