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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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