Newsgroup: it.comp.lang.visual-basic
Titolo: Evitare che un programma rimanga bloccato in attesa che una routine finisca

Ciao,
    vi espogno subito il mio problemone...
In pratica ho un programma che, all'avvio, deve caricare una quantità bella
spessa di dati ma lo deve fare in background dato che impiega parecchi
minuti prima di terminare. Vorrei che l'utente potesse svolgere anche altre
operazioni senza doversi vedere il programma "bloccato" in attesa che compia
le sue operazioni e magari fare ctrl-alt-canc credendo che si sia davvero
bloccato!
Ho provato con la classica DoEvents ma nel mio caso non va bene dato che
nella seguente funzione (che chiama la Netapi32.dll)
    lReturn = NetServerEnum( _
        ByVal 0&, _
        101, _
        Server_Info, _
        lMax, _
        lEntries, _
        lTotal, _
        ByVal lType, _
        sDomain, _
        vResume)
non ci sono cicli...:-) e metterla prima o dopo non cambia nulla. Devo solo
aspettare che mi venga ritornato un valore dalla funzione NetServerEnum (che
in pratica calcola, nella mia lan aziendale, tutti domini e i computer
appartenentevi, visualizzandoli poi in una bella treeview)... qualcuno ha
qualche suggerimento? Esiste qualche metodo generale che possa fare al caso
mio?
Spero di essermi spiegato a sufficienza...
Grazie a tutti.

 Grazie a tutti.
Prova a cacciare la routine in un timer che probabilmente, (presumo e
probabilmente mi sbaglio anche) fungendo in maniera asincrona darà la
possibilità al programma di fare altre operazioni tipo mostrarti la form o
fare quell'accibervolina che ti pare...che tu avrai inserito ad esempio
nella routine form_load
Ciao

 minuti prima di terminare.
Io farei un programmino a parte che esegue quella funzione e scrive
su disco (o da qualche altra parte a tua scelta) la "bella treeview".
E tu, poi, col programma principale, provi ogni tanto a vedere se il file è
pieno lasciando all'utente la possibilità di fare ciò che vuole.
--
Er Roscio.

 probabilmente mi sbaglio anche) fungendo in maniera asincrona
Come detto alcuni post più sotto, i timer non sono asincroni.
Sono solo temporizzati.
Ciao

 > Ciao,
CUT
Rallentando comunque il tutto di brutto...ma un bel splash con il classico
"Attendere prego!"???
...se proprio vuoi far il sofisticato la solita progress...se cerchi
....mille esempi ne trovi !

 ....mille esempi ne trovi !
ciao, purtroppo non va bene dato che l'utente quando apre il programma non č
detto che richiami subito questa routine, magari prima compie altre
operazioni, poi apre il menů (in cui ovviamente ci sono altre opzioni) e
richiama questa routine, perň mi si pianta tutto il progr e non possono
essere eseguite altre operazioni nel mentre!
il fatto č che essendo una chiamata ad una API questa in pratica si comporta
in maniera "despotica" e finchč non ha finito lai nisba... E' un casino, non
riesco a trovare una soluzione...


si, dovrei gestire 2 programmi a parte! non vedrei altra soluzione... in
pratica potrei creare un file.exe che lancio con una shell (in backgound) e
quando ha finito di caricarsi la tengo pronta per essere visualizzata...
altrimenti cos'altro potrei provare!! sono quasi disperato...

 in maniera "despotica" e finchè non ha finito lai nisba...
Non e' che si tratti di "dispotismo"... Il tuo programma (e la conseguente
procedura in DLL) opera all'interno di un unico processo e come tale se non
rilancia di tanto in tanto la palla al sistema operativo, viene eseguito
consecutivamente. Pensa che una volta queste cose facevno bloccare l'intero
sistema...;-))
La soluzione potrebbe essere quella di inglobare quella chiamata all'interno
di un oggetto che fai compilare con un metodo di threading separato (cerca
tra le opzioni del progetto VB). Oppure con la routine crei un OCX,
anch'esso separato, e lo richiami dalla tua applicazione. Ma per ulteriori
dettagli su queste opzioni ti consiglio di cercare sull'MSDN...;-)
--
   Alex Palmese
---
Sei anche tu stanco dei messaggi spam? Usa Terminator, il programma
anti-spam italiano FREEWARE! 
http://www.sertel.net/terminator/

 sistema...;-))
Cosa che capita tranquillamente anche oggi :P
Ciao


ROTFL!! teribbile... purtroppo però hai ragione... ;-(

 dettagli su queste opzioni ti consiglio di cercare sull'MSDN...;-)
premesso che non ho mai creato OCX, penso che perň potrebbe funzionare...
stasera ci provo e vedo un pň cosa esce fuori... magari farebbe comodo anche
ad altri e la si potrebbe pubblicare sul sito comune... che onore sarebbe
;-)!!
ciau e grazie!!