Oppure

Loading
16/12/11 11:38
Cobra
Ciao ragazzi,
ho fatto una piccola applicazione che mi dovrebbe, attraverso il cellulare collegato come modem, di riuscire ad intercettare le chiamate in entrata e poi, una volta "agganciate", farmi apparire due button, solo che l'applicazione, che è corredata da un serialport ed un timer, è come se andasse in stallo, e passando il cursore del mouse sulla form appare la classica clessidra, per essere più chiaro vi posto il codice qui di seguito:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            With SerialPort1
                .PortName = "COM4"
                .BaudRate = 115200
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
            End With
            SerialPort1.Open()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        Label1.Text = "Pronto"
        Button1.Visible = False
        Button2.Visible = False
        Button1.Text = "Rispondi"
        Button2.Text = "Chiudi"
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Try
            SerialPort1.ReadLine.Contains("RING")
            Label1.Text = "Chiamata in arrivo"
            Button1.Visible = True
            Button2.Visible = True
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.WriteLine("ATA" & vbCrLf)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        SerialPort1.WriteLine("AT+CHUP" & vbCrLf)
    End Sub

End Class


Comunque ho notato che il problema sta proprio nel timer, che "incanta" tutta l'applicazione. Esiste un altro metodo per ovviare a tale problema? Ciao e grazie a tutti in anticipo ;)
aaa
16/12/11 12:46
Qwertj
Prova a usare un thread invece di un Timer.
Potresti usare BackgroundWorker che è un tantino più inuitivo (vedi guida di Totem)
aaa
16/12/11 14:43
Cobra
Postato originariamente da Qwertj:

Prova a usare un thread invece di un Timer.
Potresti usare BackgroundWorker che è un tantino più inuitivo (vedi guida di Totem)


Ho provato a seguire il tuo consiglio, sia con il thread che con backgroundworker, solo che, eseguendo il debug, mi apre una finestra di errore (ho postato l'immagine). Posto nuovamente il codice con la rimozione del timer e l'aggiunta del backgroundworker:

Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Try
            With SerialPort1
                .PortName = "COM4"
                .BaudRate = 115200
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
            End With
            SerialPort1.Open()
        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
        Label1.Text = "Pronto"
        Button1.Visible = False
        Button2.Visible = False
        Button1.Text = "Rispondi"
        Button2.Text = "Chiudi"
        BackgroundWorker1.RunWorkerAsync()
    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SerialPort1.WriteLine("ATA" & vbCrLf)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        SerialPort1.WriteLine("AT+CHUP" & vbCrLf)
    End Sub
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
                    Try
                SerialPort1.ReadLine.Contains("RING" & vbCrLf)
                Label1.Text = "Chiamata in arrivo"
                Button1.Visible = True
                Button2.Visible = True
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
           End Sub
End Class
aaa
16/12/11 15:21
Qwertj
Prova a inserire nell'handler dell'evento Load del form
Control.CheckForIllegalCrossThreadExceptions = False
Ultima modifica effettuata da Qwertj 16/12/11 15:22
aaa
16/12/11 15:55
Cobra
Postato originariamente da Qwertj:

Prova a inserire nell'handler dell'evento Load del form
Control.CheckForIllegalCrossThreadExceptions = False


cioè in questo modo?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Control.checkforillegalcrossthreading = False


però mi dice che checkforillegalcrossthreading non è membro di System.Windows.Forms.Control :-|
aaa
16/12/11 17:24
Garu
Postato originariamente da Cobra:

Postato originariamente da Qwertj:

Prova a inserire nell'handler dell'evento Load del form
Control.CheckForIllegalCrossThreadExceptions = False


cioè in questo modo?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Control.checkforillegalcrossthreading = False


però mi dice che checkforillegalcrossthreading non è membro di System.Windows.Forms.Control :-|


Questo dovrebbe andar :yup:
   Control.CheckForIllegalCrossThreadCalls = False
aaa
16/12/11 17:49
Qwertj
E' come ha detto Garu...
Certo che sforzarsi un secondo no, eh? Non guardi l'Intellisense? :_doubt:
aaa
16/12/11 18:23
Cobra
Postato originariamente da Garu:

Postato originariamente da Cobra:

Postato originariamente da Qwertj:

Prova a inserire nell'handler dell'evento Load del form
Control.CheckForIllegalCrossThreadExceptions = False


cioè in questo modo?

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Control.checkforillegalcrossthreading = False


però mi dice che checkforillegalcrossthreading non è membro di System.Windows.Forms.Control :-|


Questo dovrebbe andar :yup:
   Control.CheckForIllegalCrossThreadCalls = False


Grazie mille, è andato tutto ok ;)
aaa