2012-06-22 7 views
5

I Avere un programma scritto in VB6 che legge un file di testo lungo ed esegue un'operazione molto lunga. Ho anche implementato la barra di avanzamento, ma il mio problema è che, dopo che il mio programma ha risposto "Non risponde" e ricomincia a rispondere quando l'attività è completata.L'applicazione VB6 smette di rispondere

Come rimuovere questo problema "Non risponde"?

+1

Benvenuti in StackOverflow. Puoi leggere le domande frequenti e le pagine correlate riguardo [etichetta] (http://stackoverflow.com/faq#etiquette), e non provare SHOUT o usare il grassetto inutilmente. – Deanna

+1

Potresti essere interessato alle domande correlate [annullando un processo di lunga durata in Vb6] (http://stackoverflow.com/questions/155517/cancelling-a-long-running-process-in-vb6-0-without- doevents) e [utilizzando thread in VB6] (http://stackoverflow.com/questions/383162/to-use-thread-in-programming-in-vb6) e [creando un kill event per un'app Vb6] (http: //stackoverflow.com/questions/727386/making-ac-sharp-kill-event-for-a-vb6-app). I titoli potrebbero non sembrare correlati, ma le risposte ti saranno utili. Spiegano alcuni modi diversi per eseguire l'elaborazione in background in VB6 – MarkJ

risposta

7

Windows/Explorer cambierà un processo nello stato "Non risponde" quando è troppo lungo senza elaborare alcun messaggio. In VB6, ciò si verifica quando si esegue una lunga sezione di codice senza chiamare DoEvents.

Sfortunatamente, VB6 non esegue facilmente più thread, quindi l'opzione migliore è chiamare periodicamente DoEvents durante l'operazione. Idealmente, questo sarebbe solo dopo aver aggiornato la posizione della barra di avanzamento.

Quando si esegue questa operazione, è necessario prestare attenzione alla protezione contro la reinserzione. Questo è abbastanza facile disabilitando i controlli quando inizia l'operazione lunga e riattivandoli quando è finito. Se si desidera consentire loro di annullare, sarà necessario utilizzare un valore booleano impostato nell'evento di clic del pulsante Annulla e controllare dopo chiamando DoEvents.

+0

+1 Come discusso [qui] (http://stackoverflow.com/questions/155517/cancelling-a-long-running-process-in-vb6-0- senza-DoEvents) – MarkJ

1

È possibile chiamare DoEvents durante un'operazione a lungo, ma attenzione poiché è associato a various caveats.

Problemi correlati