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
.
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
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