loop

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Best answers
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.339
3
38
73
Livorno
2010
Best answers
0
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
0
0
torino
2010
Best answers
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
 

patel

Utente assiduo
25 Marzo 2016
1.339
3
38
73
Livorno
2010
Best answers
0
non conosco il tuo codice e quindi non posso fare altro che darti suggerimenti vaghi
 

patel

Utente assiduo
25 Marzo 2016
1.339
3
38
73
Livorno
2010
Best answers
0
interrogare la scheda significa ricevere i dati da scrivere sulla richtextbox
 

Orset

Utente abituale
14 Dicembre 2017
103
0
0
torino
2010
Best answers
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

Utente assiduo
Expert
19 Novembre 2016
1.382
87
48
58
Teramo (Provincia)
zer0kelvin.altervista.org
2010
Best answers
59
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
15.461
418
83
Como
2011MAC 2016WIN
Best answers
184
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
0
0
torino
2010
Best answers
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
0
0
torino
2010
Best answers
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
0
0
torino
2010
Best answers
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
0
0
torino
2010
Best answers
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
15.461
418
83
Como
2011MAC 2016WIN
Best answers
184
Ciao, con l'istruzione sopra hai risolto?
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
15.461
418
83
Como
2011MAC 2016WIN
Best answers
184
Ah, mi sembrava ...
 

Sostieni ForumExcel

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