Freeze Windows Form durante operazioni

di il
3 risposte

Freeze Windows Form durante operazioni

Buonasera ragazzi, vi scrivo brevemente il mio "problema". Ho creato una piccola app per Windows con Visual Studio in VB.Net la quale si occupa di estrapolare dei dati da fogli excel esistenti e trascriverli in un txt per manipolarli e far altre operazioni. Il problema sorge quando, tramite button, avvio l'operazione sopra descritta. Infatti nonostante lui svolga regolarmente il tutto sono impossibilitato a ridurre la finestra come usualmente si fa, ad esempio, quando si avvia un backup tramite SW di terzi e nel contempo si vuole far altro, dal momento che nonostante prema l'icona per ridurre la finestra o spostarla all'opposto del desktop, rimane freezata. Non appena finisce l'operazione posso ritornare a ridurla, chiuderla e via dicendo. Non so se si sia capito bene il mio inghippo. Leggevo qualcosa correlata ai thread, alcuni suggerivano di usare Application.DoEvent() ma non sono riuscito a venirne a capo.


Grazie, buona vigilia di ferragosto

3 Risposte

  • Re: Freeze Windows Form durante operazioni

    Come hai già capito una delle soluzioni è quella di inserire nel tuo programma dei Application.DoEvents() qui e là per far fare il refresh della GUI e gestire la grafica.
    Ma se il tuo programma fa delle oprazioni che richiedono parecchio tempo è chiaro che tra un DoEvents e l'altro il tutto rimane freeze.

    Devi quindi utilizzare un oggetto BackgroundWorker (così non devi diventare matto a gestire i thread), e far fare il lavoro a questo oggetto in modo che la grafica sia libera di gestire la finestra con i suoi spostamenti, riduzione ad icona eccetera
  • Re: Freeze Windows Form durante operazioni

    Se le operazioni che richiedono tempo e CPU hanno luogo all'interno di un evento, la tua applicazione non sarà in grado di gestire nuovi messaggi in arrivo, compresi quelli di ridisegno della videata, e pertanto la tua applicazione apparirà "bloccata" dal punto di vista dell'utente ma anche di quello del sistema operativo.

    Sposta magari quella logica all'interno di un BackgroundWorker, in modo da eseguirla su un thread separato lasciando l'applicazione libera di rispondere a eventuali messaggi.

    Occorre fare attenzione che non siano possibili avvii multipli del processo oppure chiusure improvvise del programma senza che questo abbia verificato la conclusione effettiva delle operazioni.

    Ciao!
  • Re: Freeze Windows Form durante operazioni

    Grazie mille ad entrambi, problema risolto mediante BackgroundWorker
Devi accedere o registrarti per scrivere nel forum
3 risposte