Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Comunicazione seriale cellulare all'arrivo di una chiamata
Forum - C# / VB.NET - Comunicazione seriale cellulare all'arrivo di una chiamata

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 12:38
Venerdì, 16/12/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

  1. Public Class Form1
  2.  
  3.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         Try
  5.             With SerialPort1
  6.                 .PortName = "COM4"
  7.                 .BaudRate = 115200
  8.                 .Parity = IO.Ports.Parity.None
  9.                 .DataBits = 8
  10.                 .StopBits = IO.Ports.StopBits.One
  11.             End With
  12.             SerialPort1.Open()
  13.         Catch ex As Exception
  14.             MsgBox(ex.ToString)
  15.         End Try
  16.         Label1.Text = "Pronto"
  17.         Button1.Visible = False
  18.         Button2.Visible = False
  19.         Button1.Text = "Rispondi"
  20.         Button2.Text = "Chiudi"
  21.         Timer1.Start()
  22.     End Sub
  23.  
  24.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  25.         Try
  26.             SerialPort1.ReadLine.Contains("RING")
  27.             Label1.Text = "Chiamata in arrivo"
  28.             Button1.Visible = True
  29.             Button2.Visible = True
  30.         Catch ex As Exception
  31.             MsgBox(ex.ToString)
  32.         End Try
  33.     End Sub
  34.  
  35.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  36.         SerialPort1.WriteLine("ATA" & vbCrLf)
  37.     End Sub
  38.  
  39.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  40.         SerialPort1.WriteLine("AT+CHUP" & vbCrLf)
  41.     End Sub
  42.  
  43. 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 ;)


« La vita è troppo breve per avere dei nemici. »
    
(Ayrton Senna)
PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 13:46
Venerdì, 16/12/2011
Prova a usare un thread invece di un Timer.
Potresti usare BackgroundWorker che è un tantino più inuitivo (vedi guida di Totem)


Blog:
<coming soon>
Appalo:
http://www.appalo.it/
PM Quote
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 15:43
Venerdì, 16/12/2011
Testo quotato

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

  1. Public Class Form1
  2.  
  3.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.         Try
  5.             With SerialPort1
  6.                 .PortName = "COM4"
  7.                 .BaudRate = 115200
  8.                 .Parity = IO.Ports.Parity.None
  9.                 .DataBits = 8
  10.                 .StopBits = IO.Ports.StopBits.One
  11.             End With
  12.             SerialPort1.Open()
  13.         Catch ex As Exception
  14.             MsgBox(ex.ToString)
  15.         End Try
  16.         Label1.Text = "Pronto"
  17.         Button1.Visible = False
  18.         Button2.Visible = False
  19.         Button1.Text = "Rispondi"
  20.         Button2.Text = "Chiudi"
  21.         BackgroundWorker1.RunWorkerAsync()
  22.     End Sub
  23.  
  24.  
  25.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  26.         SerialPort1.WriteLine("ATA" & vbCrLf)
  27.     End Sub
  28.  
  29.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  30.         SerialPort1.WriteLine("AT+CHUP" & vbCrLf)
  31.     End Sub
  32.     Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
  33.                     Try
  34.                 SerialPort1.ReadLine.Contains("RING" & vbCrLf)
  35.                 Label1.Text = "Chiamata in arrivo"
  36.                 Button1.Visible = True
  37.                 Button2.Visible = True
  38.             Catch ex As Exception
  39.                 MsgBox(ex.ToString)
  40.             End Try
  41.            End Sub
  42. End Class



Cobra ha allegato un file: problema.jpg (83621 bytes)
Clicca qui per guardare l'immagine


« La vita è troppo breve per avere dei nemici. »
    
(Ayrton Senna)
PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 16:21
Venerdì, 16/12/2011
Prova  a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET

  1. Control.CheckForIllegalCrossThreadExceptions = False


Ultima modifica effettuata da Qwertj il 16/12/2011 alle 16:22


Blog:
<coming soon>
Appalo:
http://www.appalo.it/
PM Quote
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 16:55
Venerdì, 16/12/2011
Testo quotato

Postato originariamente da Qwertj:

Prova  a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET

  1. Control.CheckForIllegalCrossThreadExceptions = False




cioè in questo modo?

Codice sorgente - presumibilmente VB.NET

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



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


« La vita è troppo breve per avere dei nemici. »
    
(Ayrton Senna)
PM Quote
Avatar
Garu (Normal User)
Newbie


Messaggi: 13
Iscritto: 02/08/2011

Segnala al moderatore
Postato alle 18:24
Venerdì, 16/12/2011
Testo quotato

Postato originariamente da Cobra:

Testo quotato

Postato originariamente da Qwertj:

Prova  a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET

  1. Control.CheckForIllegalCrossThreadExceptions = False




cioè in questo modo?

Codice sorgente - presumibilmente VB.NET

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



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



Questo dovrebbe andar :yup:
Codice sorgente - presumibilmente Plain Text

  1. Control.CheckForIllegalCrossThreadCalls = False


PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 18:49
Venerdì, 16/12/2011
E' come ha detto Garu...
Certo che sforzarsi un secondo no, eh? Non guardi l'Intellisense? :_doubt:


Blog:
<coming soon>
Appalo:
http://www.appalo.it/
PM Quote
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 19:23
Venerdì, 16/12/2011
Testo quotato

Postato originariamente da Garu:

Testo quotato

Postato originariamente da Cobra:

Testo quotato

Postato originariamente da Qwertj:

Prova  a inserire nell'handler dell'evento Load del form
Codice sorgente - presumibilmente C# / VB.NET

  1. Control.CheckForIllegalCrossThreadExceptions = False




cioè in questo modo?

Codice sorgente - presumibilmente VB.NET

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



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



Questo dovrebbe andar :yup:
Codice sorgente - presumibilmente Plain Text

  1. Control.CheckForIllegalCrossThreadCalls = False




Grazie mille, è andato tutto ok ;)


« La vita è troppo breve per avere dei nemici. »
    
(Ayrton Senna)
PM Quote
Avatar
Cobra (Normal User)
Rookie


Messaggi: 29
Iscritto: 04/11/2011

Segnala al moderatore
Postato alle 19:24
Venerdì, 16/12/2011
Testo quotato

Postato originariamente da Qwertj:

E' come ha detto Garu...
Certo che sforzarsi un secondo no, eh? Non guardi l'Intellisense? :_doubt:



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


« La vita è troppo breve per avere dei nemici. »
    
(Ayrton Senna)
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo