PDA

View Full Version : VB: Come si fa una Sleep?


dodomio
16-09-2002, 12:29
So che la domanda può essere banale, ma del resto sono un novizio di VB ;) ). Ma come faccio a mettere in pausa l'esecuzione del codice? Insomma, devo fare una Sleep. Ma non la trovo!!! :confused:

Mi aiutate?

cisky
16-09-2002, 12:43
Utilizza l'API apposita.(Imposti il numero di millisecondi di attesa)

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


es:
sleep 1000 ' *** (Attende 1 secondo)

dodomio
16-09-2002, 13:18
Grazie.
Il mio problema era in effetti che non immaginavo nemmeno come si facesse ad "includere" una api.

Ora che lo so ho un altro problema.

Dopo aver cambiato la Caption di una Label, ho assoluto bisogno di fare un refresh in modo che venga attivato l'evento Change della label. Come faccio?
ho provato Refresh, Me.refresh, Label.Refresh, ma nessuna fa ciò che volevo.

cisky
17-09-2002, 12:58
Semplicemente richiami il metodo change della label

es:

label1.caption ="testo di esempio"
label1_Change

Comunque stai attento perchè se imposti una caption differente alla label, scateni in automatico un evento Change.

dodomio
17-09-2002, 15:01
Dunque, il mio problema è che il cambio di caption sulla label mi invia un comando sulla seriale. Da codice ho una cosa del genere

MCcommand.Caption=Stringa
MCcommand_Change 'Aggiunto su tuo consiglio

Sleep(5000) 'Questa è necessaria

...
...

In effetti il comando sulla seriale viene inviato dopo l'uscita dalla procedura, ne ho dedotto che l'evento Change della label non viene chiamato, o i messaggi che esso genera non vengono processati subito e restano nella coda dell'applicazione per essere processati all'uscita dalla procedura.

Che fò?

cisky
18-09-2002, 13:05
Non ho capito una cosa.... tu all'interno dell'evento Change della label invii le informazioni alla seriale... giusto?

Perchè non provi a impostare un punto di interruzione all'interno dell'evento per verificare se viene scatenato correttamente?... al limite x provare basta anche un'istruzione debug.print "Scatenato evento change" ... cosi' puoi verificare se il problema è il mancato richiamo dell'evento(Cosa che escludo) o se il problema è legato al passaggio dei dati alla seriale.

mi puoi spiegare come invii i dati alla seriale?...

dodomio
18-09-2002, 17:13
Dunque ora ti spiego il problema e anche come ho risolto.

Devo pilotare un lettore di banda magnetica collegato alla seriale. Il kit di sviluppo fornito dalla casa consiste in un DDE che gestisce a basso livello la comunicazione (io non so COME lo faccia). Io so solo come interfacciarmi con il DDE.
I loro esempi scatenavano una chiamata al DDE quando tu cambiavi cio che era scritto in una textbox, ed io mi sono attenuto.

Il problema era che avevo una sequenza di istruzioni tipo:

MCCommand.caption=stringa1 'visualizza qualcosa sul display del lettore
Sleep(2000) 'Diamo il tempo di leggere il display
MCCommand.caption=stringa2 'spegne il display

Se eseguivo passo passo o debuggando, tutto filava liscio.
In esecuzione normale invece avevo:

Una attesa di 2 secondi senza che il lettore facesse niente
Poi il lettore processava i due messaggi uno dopo l'altro col risultato che ciò che era scritto sul display non si leggeva solo un attimo.

Il mio dubbio era che il sistema non processasse i messaggi in coda all'applicazione (leggi i messaggi di repaint della textbox) e quindi non scatenasse l'evento CHANGE correttamente.

Credo di aver avuto ragione perchè mi è bastato mettere una semplice DoEvents dopo ogni cambio di caption per ottenere l'effetto corretto.

Ciao, dodomio.