|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
[VB.NET] Evento pinchanged (seriale)
Salve a tutti... il frammento di codice che penso mi crei probelmi è il seguente.
Codice:
Private Sub PinChange(ByVal sender As Object, ByVal e As System.IO.Ports.SerialPinChangedEventArgs) Handles serialPort.PinChanged
Me.Invoke(New PinChangeDelegate(AddressOf updatePin), New Object() {})
End Sub
Public Delegate Sub PinChangeDelegate()
Public Sub updatePin()
Application.DoEvents()
If serialPort.CtsHolding = False And send_complete = False Then
Threading.Thread.Sleep(100)
X_COORD.Text = XCOORD
Y_COORD.Text = YCOORD
InviaDati()
End If
End Sub
Il problema è che dopo aver inviato i dati richiesti (tramite la chiamata della sub "InviaDati"), l'applicazione rimane bloccata fino al successivo invio di dati e non mi aggiorna nessun controllo nella form, se non quando viene chiamato il delegato mostrato. Come posso liberare l'applicazione? Io sospetto che il problema sia il controllo sul CTS; forse lo fa di continuo, come un loop, e a causa di questo l'applicazione è impegnata. Grazie ^^
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
UP^^ nessuna idea?
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2005
Città: 127.0.0.1
Messaggi: 1632
|
edit
__________________
Think! Ultima modifica di dvbman : 19-04-2008 alle 17:39. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2005
Città: 127.0.0.1
Messaggi: 1632
|
ho editato perchè non ho qui vb.net per provare..ti consigliavo di provare a triggerare e.EventType per intercettare solo l'evento cambio cts così da lanciare la funzione update pin solo quando necessario (e non "sempre" come ora) per tentare di circoscrivere il problema
__________________
Think! |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Per caso InviaDati, oltre a forse inviare i dati, aggiorna qualche controllo/grafica della form? Anche solo magari indirettamente per mezzo di altri eventi?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
Quote:
x GugoXX: in InviDati, ci sono condizioni "If" su alcuni controli e abilitazione e disabilitazione di alcuni bottoni. Il problema del bloccaggio applicazione sembra essere risolto se uso il seguente codice: Codice:
Public Delegate Sub DataReceivedDelegate()
Public Sub updateCoord()
Application.DoEvents()
receivedchar = serialPort.ReadExisting
If receivedchar = "K" And send_complete = False Then
Threading.Thread.Sleep(100)
InviaDati()
End If
End Sub
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: 127.0.0.1
Messaggi: 1632
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
Ho trovato il CTSChanged e quindi il codice è diventato il seguente:
Codice:
Public Delegate Sub PinChangeDelegate()
Public Sub updatePin()
Application.DoEvents()
If IO.Ports.SerialPinChange.CtsChanged And send_complete = False Then
Threading.Thread.Sleep(100)
InviaDati()
End If
End Sub
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Se per caso fosse bloccante (non e' da escludersi, anche se strano), potresti provare a ipotizzare di mettere quella parte in un thread separato.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
Quote:
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Sep 2002
Messaggi: 323
|
Ma è possibile mettere il seguente codice:
Codice:
Private Sub PinChange(ByVal sender As Object, ByVal e As System.IO.Ports.SerialPinChangedEventArgs) Handles serialPort.PinChanged
Me.Invoke(New PinChangeDelegate(AddressOf updatePin), New Object() {})
End Sub
Public Delegate Sub PinChangeDelegate()
Public Sub updatePin()
Application.DoEvents()
If serialPort.CtsHolding = False And send_complete = False Then
Threading.Thread.Sleep(100)
X_COORD.Text = XCOORD
Y_COORD.Text = YCOORD
InviaDati()
End If
End Sub
__________________
Intel Inside Pentium D 945 3.4GHz - 3GB DDR2 667Mhz Dual Channel (2x512MB+2x1GB) Kingston - ASUS P5LD2 - HDD Maxtor 250Gb SATA - ATI SAPPHIRE X1900XTX 512Mb - Alimentatore Corsair VX550W - Monitor LCD 19" Samsung SM 930BF - Windows 7 Ultimate. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:06.




















