Newsgroup: it.comp.lang.visual-basic
Titolo: Interrompere elaborazione con VB 2010

Su una form ho posizionato un pulsante che, una volta premuto, avvia una 
serie di operazioni (apre alcuni files, legge i dati e li registra su un 
files xls.)
Una volta premuto il pulsante, la form, e lo stesso pulsante (ed 
eventualmente altri pulsanti), sono inattivi.
Volendo interrompere l'elaborazione, come posso fare dato che i pulsanti 
sono inattivi?
Ciao
nero23 

 sono inattivi?
La cosa migliore, anche se non immediata, e svolgere l'elaborazione in 
un thread separato. Guarda il controllo BackgroundWorker, ma attenzione 
che il multithreading č insidioso (da dire con la voce di Fantozzi).
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto piů di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/


Non esiste piu' l'istruzione  Doevents  in vb2010 ? 

 Non esiste piu' l'istruzione  Doevents  in vb2010 ?
Sì, ma è una porcata :-)
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3: Soluzioni a raccolta", molto più di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/


A me funzionava  bene sul vb 6 mi stoppava una elaborazione pesante
immediatamente ! 

 immediatamente !
Non dico che non funziona, ma non è assolutamente paragonabile alle 
possibilità e alla sicurezza che offre la programmazione multithreading.
Considerando che .NET offre nativamente tutti gli strumenti necessari, 
credo che valga la pena di approfondire questa direzione.



Penso che dipenda dal tipo di applicazione che vuoi fare.....
Per esempio avevo fatto una prova di sviluppo  di un sistema
superenalotto con varie riduzioni n-1 n -2   etc.  che porta
ad un'elaborazione pesante sopratutto su una quantità numerica
superiore ai 30 numeri (parecchie ore di elaborazione)........
Col doevents  potevo  interrromperla  in qualsiasi momento
col backgroundwork pensi che possa migliorare le prestazioni
notevolmente ? 

 notevolmente ?
Certo che sì. Il DoEvent blocca la procedura ad ogni ciclo, e aspetta 
l'elaborazione di tutta la coda dei messaggi per riprendere.
Far girare la procedura in un thread separato invece sfrutta 
perfettamente le potenzialità di Windows e dei processori.


 immediatamente !
DoEvents() non stoppa proprio un bel nulla, DoEvents è una porcata il 
cui scopo era quello di far respirare la message pump che 
l'applicazione con l'elaborazione onerosa stava asfissiando.
Purtroppo esiste ancora, per fortuna non esiste in WPF :-)
.m
-- 
Mauro Servienti
{C67C0157-5D98-4733-A75E-93CAEE4BADC8}
Microsoft MVP - Visual C# / MCTS
http://mvp.support.microsoft.com
blog @ 
http://milestone.topics.it
whynot [ at ] topics [ dot ] it

 .m
Ceto che non stoppa  ...pero' mi permetteva di consentire all'utente
di premere un TASTO STOP  che altrimenti non sarebbe stato possibile premere 
!!!
Era la soluzione piu' veloce e sicura in VB 6 

 notevolmente ?
così visto che ci sei con il multithread puoi sfruttare i moderni PC con 
processori multicore; già con un dual core potresti avere un netto 
miglioramento dei tempi di elaborazione...

 Era la soluzione piu' veloce e sicura in VB 6 
No, non era la più veloce. Fare un ciclo con i doevents ti rallenta
l'elaborazione anche di 100 volte.
In VB6 crea un nuovo form e mettici un pulsante.
Esegui poi questo codice
Private Sub Command1_Click()
    Print Now
    Dim i As Long
    Dim a As Long
    For i = 1 To 100000000
          a = i
          'DoEvents
    Next
    Print Now
End Sub
Prova poi ad attivare il doevents.
Senza doevents l'elaborazione è istantanea (1 secondo o meno)
Con il doevents sul mio pc ci mette 80 secondi!!!
La tua elaborazione se fatta senza doevents e gestita in modo da
supportare il multithread, da 3 ore potrebbe benissimo passare a 15 minuti.
Noi elaboriamo dati bancari, alcune  decine di milioni di record al
giorno. Ottimizzando i processi siamo passati da 9 ore (procedure messe
in piedi da aziende concorrenti) a 20 minuti, lasciando invariate le
macchine su cui le elaborazioni girano.
Nicola

 Con il doevents sul mio pc ci mette 80 secondi!!!
Scusa, un errore di battitura, non 80 ma 89 secondi.
Nicola

 ha scritto nel messaggio 
news:4C7BA08...@nicolaottomano.it...

Si in effetti  è stato cosi anche nell'elaborazione
di un sistema superenalotto ridotto n -  ( che chi se ne intende capisce
la progressione geometrica dei tempi in base al toto di numeri del sistema
e dell' n - ).
Io ho risolto  facendo il do events NON ad ogni passo del  FOR (come 
l'esempio)
ma ogni TOT. di cicli, è funge molto bene.
Praticamente  il tasto setta come true  una variabile se viene premuta
e all'interno del loop di calcolo il controllo fa uscire dalla routine......
Praticamente immediato !
Ora provero' a rimettere mano a quel programmino TEST e
portarlo su vb2010 e i relativi backgroundworks  e testero
con un timer le differenze