Bonjour
J'ai un programme A et un programme C.
-Mon programme A est client. (Et aussi un service)
-Mon programme C est serveur.
Dans A, il y a un Thread qui essaye constamment de se connecter.
Dans C, il y a un Thread qui check tout le temps si il y a un client qui se connecte.
Thread du Programme A :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Dim VariableLock1 As Object = New Object() Public Sub FonctionThreadPipeConnect() SyncLock VariableLock1 While True While Not clientPipe.IsConnected clientPipe.Connect() End While End While End SyncLock End Sub
Thread du Programme C :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Dim VariableLock1 As Object = New Object() Public Sub FonctionThreadPipeConnect() SyncLock VariableLock1 While True While Not serverPipe.IsConnected serverPipe.WaitForConnection() End While End While End SyncLock End Sub
Dans A, quelque part dans une fonction, je fais un write :
Dans C, quelque part dans le code, je fais un read :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim B() As Byte = System.Text.Encoding.GetEncoding("windows-1256").GetBytes("Aucune donnée à télécharger, veuillez retirer le lecteur") If clientPipe2.IsConnected Then clientPipe2.Write(B, 0, B.Length) End If
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 Dim VariableLock2 As Object = New Object() Public Sub FonctionThreadRead() SyncLock VariableLock2 While serverPipe.IsConnected Dim B(0 To 1000) As Byte Dim L As Integer = serverPipe.Read(B, 0, B.Length) ReDim Preserve B(0 To L - 1) 'MsgBox(System.Text.Encoding.GetEncoding("windows-1256").GetString(B)) MessageBox.Show(System.Text.Encoding.GetEncoding("windows-1256").GetString(B), "ERTool", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) End While serverPipe.Close() End SyncLock End Sub
Le tout fonctionne, si j'exécute C après A...
Si je quitte C, A plante et dis : "canal endommagé" quand il essaye de faire un "write"
Pourtant, dans le FormClosing, je fais :
Il doit y avoir un truc que j'ai zappé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub ERToolMsg_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing serverPipe.Disconnect() End Sub
Help !! Thanks![]()
Partager