loop

Orset

Utente abituale
14 Dicembre 2017
103
16
torino
2010
0
ciao a tutti, esiste un alternativa al:

do
loop Until?

Sto creando un software che gestisce un elettronica, e leggo cosa mi risponde l'elettronica tramite richtextbox.
fin a quando io non ho una stringa di (es...) 19 caratteri, il software deve attendere la risposta. se uso il do loop until, rimane bloccato in un loop, siccome si blocca il programma, e la stringa non arriverà mai

do
loop until len(richtextbox)=19

sapreste consigliarmi altre soluzioni che non blocchino la comunicazione?
 

patel

Utente assiduo
25 Marzo 2016
1.348
38
74
Livorno
2010
1
all'interno del do ...loop deve starci anche la richiesta di risposta
Codice:
do
  interroga la scheda
  scrivi la risposta in richtextbox
loop until len(richtextbox)=19
 

Orset

Utente abituale
14 Dicembre 2017
103
16
torino
2010
0
Ciao, grazie della risposta, io non l'ho messo nel esempio, ma al posto del tuo " interroga la scheda" io ho messo un if di controllo sulla richtextbox, ma rimane nel loop, tu cosa intendi nelll'interrogare la scheda?

Grazie ancora patel
 

Orset

Utente abituale
14 Dicembre 2017
103
16
torino
2010
0
scusa il ritardo, ma ho avuto brutti problemi a casa, oggi pomeriggio, appena torno, ti posto il pezzo di codice, siccome la mia difficoltà è proprio mettere il software in attesa, finche non riceve una determinata stringa, o viene confermata una condizione, senza bloccare o mandare in loop il software.
 

Zer0Kelvin

VBA Expert
Expert
19 Novembre 2016
1.560
63
59
Teramo (Provincia)
zer0kelvin.altervista.org
2010
95
Ciao.
In VBA in questi casi si utilizza DoEvents, che mi sembra esista anche in Visual Basic.
DoEvents restituisce il controllo all'applicazione in modo che possa processare la coda di eventi (movimenti del mouse, pressione di tasti ecc.)
Quindi, qualcosa di simile a questo dovrebbe funzionare
Codice:
Do
   DoEvents
Loop Until Len(richtextbox)=19
Naturalmente la richtextbox deve essere il controllo attivo in quel mentre perchè la faccenda funzioni.
Ma, invece di usare il loop, non puoi utilizzare un evento della richtextbox?
 
G

gibra

Guest
Devi usare un thread, che resti in ascolto sulla scheda.
Ma anche no. Dipende...

Se prima non mostri tu cosa usi e qual'è il tuo codice per leggere i dati dalla scheda, è difficile darti una risposta.
Stai continuamente chiedendo senza spiegare nulla.

Prima spiega cose e come fai, poi ti si può rispondere, come ti ha già fatto notare Patel.

Questa domanda
tu cosa intendi nelll'interrogare la scheda?
siamo noi a farla, e sei tu che devi rispondere.

Fino ad allora è inutile fornire qualsiasi suggerimento.
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
20.197
1.733
Como
2011MAC 2016WIN
413
Ciao.
In VBA in questi casi si utilizza DoEvents, che mi sembra esista anche in Visual Basic.
..
Ciao Zer0K,
si esiste anche in VB Net scrivendolo così

Codice:
[COLOR=#33A2BD][FONT=Consolas]Application[COLOR=#000000].DoEvents()[/COLOR][/FONT][/COLOR]
 

Orset

Utente abituale
14 Dicembre 2017
103
16
torino
2010
0
ciao a tutti, oggi provo a prendere spunto dai vostri suggerimenti, vi mostro in poche parole a cosa mi serve tutto cio:

do
SerialPort1.Write(stringa)
cont = cont +1
delay(0.4) --------------------------------->(è un ritardo (attesa) che non frizza il sofware)
loop until cont=20

il problema sta che se per qualche motivo ci mette più tempo di
di 0.4 secondi
ad inviare la stringa, succede un paciocco, mentre, se ci mette meno tempo, ho del tempo di attesa inutile.
 

Orset

Utente abituale
14 Dicembre 2017
103
16
torino
2010
0
ho provato a scrivere

do
SerialPort1.Write(stringa)
cont = cont +1
delay(0.4) --------------------------------->(è un ritardo (attesa) che non frizza il sofware)
Application
.DoEvents()
loop until cont=20

ma e come se non facesse nulla, infatti se tolgo il mio ritardo, non funziona nulla
 

Orset

Utente abituale
14 Dicembre 2017
103
16
torino
2010
0
si scusa, mi sono dimenticato questa parteXD, in poche parole, ogni volta che riceve un comando, devo attendere la sua risposta con caratteri "to"che mi stamperà sulla richtextbox
 

Orset

Utente abituale
14 Dicembre 2017
103
16
torino
2010
0
Codice:
do
[LEFT][COLOR=#333333][FONT=Verdana][COLOR=#333333][FONT=Verdana]SerialPort1.Write(stringa)[/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana]'delay(0.4)   --------------------------------->(è un ritardo (attesa) che non frizza il sofware)
[/FONT][/COLOR][/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana]   [/FONT][/COLOR][COLOR=#333333][FONT=Verdana][COLOR=#33a2bd][FONT=Consolas][FONT=Consolas] idx = InStr(RichTextBox1.Text, "to")
   If idx > 0 Then
   cont= cont + 1
Else
Application.DoEvents()
 End If[/FONT][/FONT][/COLOR]
[LEFT][COLOR=#333333][FONT=Verdana][/FONT][/COLOR][/LEFT][/FONT][/COLOR]
[COLOR=#333333][FONT=Verdana][COLOR=#333333][FONT=Verdana]loop until cont=20[/FONT][/COLOR][/FONT][/COLOR][/LEFT]
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
20.197
1.733
Como
2011MAC 2016WIN
413
Ciao, con l'istruzione sopra hai risolto?
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!