Cobra (Normal User)
Rookie
Messaggi: 29
Iscritto: 04/11/2011
|
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:
Codice sorgente - presumibilmente VB.NET |
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
|
|
Qwertj (Dev Team)
Guru
Messaggi: 678
Iscritto: 30/05/2011
|
Prova a usare un thread invece di un Timer.
Potresti usare BackgroundWorker che è un tantino più inuitivo (vedi guida di Totem)
|
|
Cobra (Normal User)
Rookie
Messaggi: 29
Iscritto: 04/11/2011
|
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:
Codice sorgente - presumibilmente VB.NET |
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
|
|
|
Qwertj (Dev Team)
Guru
Messaggi: 678
Iscritto: 30/05/2011
|
Prova a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET |
Control.CheckForIllegalCrossThreadExceptions = False
|
Ultima modifica effettuata da Qwertj il 16/12/2011 alle 16:22 |
|
Cobra (Normal User)
Rookie
Messaggi: 29
Iscritto: 04/11/2011
|
Postato originariamente da Qwertj:
Prova a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET |
Control.CheckForIllegalCrossThreadExceptions = False
|
|
cioè in questo modo?
Codice sorgente - presumibilmente VB.NET |
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 |
|
Garu (Normal User)
Newbie
Messaggi: 13
Iscritto: 02/08/2011
|
Postato originariamente da Cobra:
Postato originariamente da Qwertj:
Prova a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET |
Control.CheckForIllegalCrossThreadExceptions = False
|
|
cioè in questo modo?
Codice sorgente - presumibilmente VB.NET |
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
Codice sorgente - presumibilmente Plain Text |
Control.CheckForIllegalCrossThreadCalls = False
|
|
|
Qwertj (Dev Team)
Guru
Messaggi: 678
Iscritto: 30/05/2011
|
E' come ha detto Garu...
Certo che sforzarsi un secondo no, eh? Non guardi l'Intellisense?
|
|
Cobra (Normal User)
Rookie
Messaggi: 29
Iscritto: 04/11/2011
|
Postato originariamente da Garu:
Postato originariamente da Cobra:
Postato originariamente da Qwertj:
Prova a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET |
Control.CheckForIllegalCrossThreadExceptions = False
|
|
cioè in questo modo?
Codice sorgente - presumibilmente VB.NET |
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
Codice sorgente - presumibilmente Plain Text |
Control.CheckForIllegalCrossThreadCalls = False
|
|
Grazie mille, è andato tutto ok |
|
Cobra (Normal User)
Rookie
Messaggi: 29
Iscritto: 04/11/2011
|
Postato originariamente da Qwertj:
E' come ha detto Garu...
Certo che sforzarsi un secondo no, eh? Non guardi l'Intellisense? |
Si, è vero, hai ragione, ma purtroppo sono andato nel pallone, colpa anche del raffreddore che non mi fa capire un tubo, ti ringrazio comunque per la disponibilità e per la pazienza avuta |
|