Bonjour,

J'écris une petite application qui fait la chose suivante :

Lecture et Log d'information recu sur le port série 1.

Lorsqu'une certaine string est lue vie ce port série 1, l'application doit ouvrir la com2 et faire un appel via un modem.

Afin de ne pas bloquer la réception de la com1, j'utilise un thread pour lancer la procédure d'appel COM2.

Jusque la tout fonctionne bien.

Le problème se pause lorsque plus tard une deuxième string entre sur le port série 1, je ne peux pas relancer mon thread. (voir le code plus bas)

Comment pourrai-je solutionner mon problème ?

Merci d'avance,

Looney



Un peu de code :

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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
 
    Private WithEvents moRS232 As Rs232
    Private WithEvents moCOM3 As Rs232
    Private p_CallTech As Thread
 
    Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        p_CallTech = New Thread(New ThreadStart(AddressOf CallTech))
    End Sub
 
'.... Initiation de la COM2, ...
 
    Private Sub Com1_EventRaised(ByVal source As Rs232, ByVal mask As Rs232.EventMasks) Handles moRS232.CommEvent
        Debug.Assert(Me.InvokeRequired = False)
        RxPanel.Visible = True
 
        Dim iPnt As Int32, sBuf As String, Buffer() As Byte
        Debug.Assert(Me.InvokeRequired = False)
 
        If (mask And Rs232.EventMasks.RxChar) > 0 Then
            Buffer = source.InputStream
            For iPnt = 0 To Buffer.Length - 1
                If Buffer(iPnt) <> 13 Then
                    sOutput += Chr(Buffer(iPnt))
                Else
                    If Not sOutput Is Nothing Then
                        If sOutput.IndexOf("Cause Code=16") <> -1 Then
                            If(p_CallTech.IsAlive = False) then
                                      p_CallTech.Start()     ' Mon thread démarre ici
                            End If
                            sOutput = Nothing
                        End If
                    Else
                        sOutput = Nothing
                    End If
                End If
                If (ckShow.Checked) Then
                    tbDataCom1.AppendText(Chr(Buffer(iPnt)))
                End If
                If tbDataCom1.TextLength > 59950 Then
                    tbDataCom1.Text = ""
                End If
            Next
        End If
        RxPanel.Visible = False
    End Sub
 
    Private Sub CallTech()
        RxPanel2.Visible = True
        moCOM3 = New Rs232
        Try
            '// Setup parameters
            With moCOM3
                .Port = 3
                .BaudRate = 9600
                .DataBit = 8
                .StopBit = Rs232.DataStopBit.StopBit_1
                .Parity = Rs232.DataParity.Parity_None
                .Timeout = 300
            End With
            '// Initializes port
            tbDataCom2.AppendText("Initializing COM3 ..." + vbCrLf)
            moCOM3.Open()
            '// Set state of RTS / DTS
            tbDataCom2.AppendText("Enabling DTR & RTS" + vbCrLf)
            moCOM3.Dtr = True
            moCOM3.Rts = True
            tbDataCom2.AppendText("Enabling Events" + vbCrLf)
            moCOM3.EnableEvents()
 
            'btnConnectCom1.Enabled = False
            'btnDisconnect.Enabled = True
            Dim sTx As String
            '----------------------
            '// Clear Tx/Rx Buffers
            tbDataCom2.AppendText("Purging Buffers Tx - Rx" + vbCrLf)
            moCOM3.PurgeBuffer(moCOM3.PurgeBuffers.TxClear Or moCOM3.PurgeBuffers.RXClear)
            sTx = "ATDTxxxxxxxxxxxxxxxxxxx"
            tbDataCom2.AppendText("Dialing with String : " & sTx & " " + vbCrLf)
            sTx += ControlChars.Cr
            moCOM3.Write(sTx)
            tbDataCom2.AppendText("Thread Sleeping 25sec..." + vbCrLf)
            System.Threading.Thread.Sleep(25000)
            Application.DoEvents()
            tbDataCom2.AppendText("Closing COM3" + vbCrLf)
            moCOM3.Close()
            RxPanel2.Visible = False
        Catch Ex As Exception
            MessageBox.Show(Ex.Message, "Connection Error", MessageBoxButtons.OK)
        End Try
    End Sub