Thread obsoleto Applicazione "Non Risponde" durante esecuzione di alcune righe di codice

vincenzo.neo

Nuovo utente
Autore del topic
17 Marzo 2014
8
0
Miglior risposta
0
Salve a tutti,

La mia applicazione esegue, al click del mouse su un Button, una serie di lunghe operazioni (copia di file in rete con ProgressBar da un server ad un client), durante le quali non mi permette di accedere a null'altro. Non posso né spostare la finestra, né cliccare altri tasti, né visualizzare il progresso delle operazioni; faccio notare che l'applicazione funziona, NON si blocca, non ci sono loop infiniti e infatti porta con successo a termine quello che deve fare.
Vorrei solo poter fare altro mentre esegue queste lunghe operazioni.
Ho provato anche ad applicare "Application.DoEvent" prima di ogni esecuzione, ma senza alcun risultato.

Di seguito vi illustro una parte di codice:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Cosa/o come potrei risolvere?

Grazie mille in anticipo.
 
Salve a tutti,

La mia applicazione esegue, al click del mouse su un Button, una serie di lunghe operazioni (copia di file in rete con ProgressBar da un server ad un client), durante le quali non mi permette di accedere a null'altro. Non posso né spostare la finestra, né cliccare altri tasti, né visualizzare il progresso delle operazioni; faccio notare che l'applicazione funziona, NON si blocca, non ci sono loop infiniti e infatti porta con successo a termine quello che deve fare.
Vorrei solo poter fare altro mentre esegue queste lunghe operazioni.
Ho provato anche ad applicare "Application.DoEvent" prima di ogni esecuzione, ma senza alcun risultato.

Di seguito vi illustro una parte di codice:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Cosa/o come potrei risolvere?

Grazie mille in anticipo.

Esegui le operazioni in un thread separato.
Sposto in assistenza Tecnica ^^
 
Chiedo scusa se mi permetto TBH,

come lo imposto in un thread separato? Quest'argomento mi è nuovo.

GRazie mille
 
Ciao System32,
ho provato a configurare in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Però l'applicazione continua a dirmi "(Non Risponde)" se voglio utilizzare altre funzionalità e se voglio interrompere l'esecuzione con Button2 mi restituisce il seguente errore "MyApp.exe ha smesso di funzionare.
Dov'è che sbaglio?

Grazie come sempre
 
@vincenzo.neo

perché crei localmente un thread che non viene avviato? in questo modo lancia eccezione

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Ti ripropongo la versione corretta del codice devi solo aggiungere nel button2 e sistemare le operazioni cross-thread
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

gestire il cross-Thread nelle applicaizoni win form è importante e devi usare i delegate per gestirlo, altrimenti esiste un istruzione che ti consente di evitare questo controllo che è

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
in questo modo le eccezioni generate vengono semplicemente ignorate
 
Ultima modifica:
Ah ecco, ho dato uno sguardo veloce al codice e non avevo notato il cross-thread. Comunque @TBH va bene utilizzare CheckForIllegalCrossThreadCalls ma è più corretto effettuare un controllo sull'operazione cross-thread gestendola per renderla thread-safe :
Perfavore, Entra oppure Registrati per vedere i Link!


Diciamo che CheckForIllegalCrossThreadCalls è una proprietà "sbrigativa", tuttavia serve solo ad ignorare, non a gestire, le eccezioni generate da un cross-thread il che è molto diverso. Comunque così come ho scritto nel post precedente è bene inserire una Sleep() in modo da far "riposare" la CPU quando si tratta di operazioni come questa.
 
Ciao Vincenzo, potresti provare quello che ha detto TBH
comunque, per vedere se un thread è attivo potresti anche inserire una variabile boolean impostata con un esito negativo

PHP:
Perfavore, Entra oppure Registrati per vedere i codici!

invece, quando avvii
PHP:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica: