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 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 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 : 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
Partager