Newsgroup: it.comp.lang.visual-basic
Titolo: Cicli bloccanti...

Salve a tutti,
    mi sono accorto, con grande rammarico, che un qualsiasi ciclo in VB (sia
esso fatto con un FOR...NEXT, DO...WHILE, WHILE...WHEND o anche con i GOTO)
č bloccante rispetto ad alcuni oggetti. Mi spiego:
Un semplicissimo codice come:
For i = 1 to 20000
    Me.Caption = i
    Doevents
Next
non crea alcun rallentamento ( o quasi) per quanto riguarda per esempio
l'evento click di un command button, ma risulta totalmento bloccante per un
menu a tendina o per l'evento scroll di una Microsoft Hierarchical Grid, e
viceversa. Cioč anche l'apertura di un menů a tendina č bloccante per il
ciclo.
Qualcuno sa in che modo potrei risolvere il problema? (premetto che non
posso permettermi di create un thread separato con CreateThread, perchč sono
alla fine di un grosso progetto e il ciclo che devo gestire fa di tutto e,
provando a metterlo in un processo separato, mi fa crashare... dovrei
riscrivere mezzo progetto)
Grazie a tutti e scusate per la filippica che ho scritto

 e viceversa. Cioè anche l'apertura di un menù a tendina è bloccante per il
ciclo.
Questo è comprensibile: Un menù è modale.

Grazie per la repentina risposta,
    effettivamente c'è una complicazione: ho un timer che lavora in
background e che, anche quando ho un menu aperto, lancia una funzione
contenete un ciclo. Nel momento in cui parte il ciclo, che interroga un
modem gsm, il menu a tendina si blocca.
    Immagino che l'unica soluzione sia usare un Timer per effettuare il
ciclo, lo so che fa schifo come soluzione, ma sono un po alle strette di
tempo ed idee...
Comunque grazie ancora per la cortesia...
Un saluto

 tempo ed idee...
Occhio che le finestre modali come MsgBox (provato) e Menù (non ho provato)
bloccano tutto dell'applicazione corrente, anche il timer.

 modem gsm, il menu a tendina si blocca.
Perchè non simuli il multi trheading con una app separata che ti fa tutte
queste operazioni in background?
Se la fai come ActiveX-exe puoi anche facilmente interagire con questa
tramite le classi che espone.
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"

Grazie ancora della cortesia, volevo ricambiare (anche se in maniera minima)
il favore, facendoti una precisazione: il MsbBox di VB è bloccante per i
timer  e per tutta l'applicazione, mentre il MessageBox delle api NO, puoi
infatti specificare l'handle della finestra proprietaria, cosicchè un
eventuale timer non si blocchi.
Grazie di tutto, in qualche modo farò...

 bloccano tutto dell'applicazione corrente, anche il timer.
Invecie avevo scoperto che i timer non vengono bloccati dalle finestre
modali (forse dai msgbox sě? mi sembra strano perň).


 modali (forse dai msgbox sě? mi sembra strano perň).
Per MsgBox, sono sicuro.

 eventuale timer non si blocchi.
Non discuto, stavo solo paragonando il comportamento dei MsgBox "normali" a
quelli dei vari menù a tendina o popup che siano.


Mi sa che alla fine mi metterò giù a cambiare mezzo programma e farò così...
sarà un weekend di fuoco
Grazie di nuovo