Timer affidabili in un'applicazione console

voti
78

Sono consapevole che in .NET ci sono tre tipi di timer (vedi Confronto tra le classi Timer nella libreria di classi .NET Framework ). Ho scelto un timer filettato come gli altri tipi possono andare alla deriva se il thread principale è occupato, e ho bisogno di questo per essere affidabile.

Il modo in cui questo timer funziona nel controllo del timer viene messa in un altro thread in modo che possa sempre spuntare insieme con il lavoro iniziano a termine sul filo genitore quando non è occupato.

Il problema con questo timer in un'applicazione console è che, mentre il timer scorre lungo su un altro thread il thread principale non sta facendo nulla per cui l'applicazione si chiude.

Ho provato ad aggiungere un while trueciclo, ma poi il thread principale è troppo occupato quando il timer non si spegne.

È pubblicato 01/08/2008 alle 13:43
fonte dall'utente
In altre lingue...                            


2 risposte

voti
50

Si può usare qualcosa di simile Console.ReadLine()per bloccare il thread principale, in modo che altri thread in background (come fili timer) continuerà a funzionare. Si può anche utilizzare un AutoResetEvent per bloccare l'esecuzione, poi (quando è necessario) è possibile chiamare il metodo set () su tale oggetto AutoResetEvent per liberare il thread principale. Inoltre assicurarsi che il riferimento a oggetto Timer non esce del campo di applicazione e di garbage collection.

Risposto il 01/08/2008 a 13:56
fonte dall'utente

voti
17

Utilizzare un ManualResetEvent per bloccare il filo conduttore al termine della sua lavorazione, e chiamare Reset()su di esso una volta di elaborazione del timer è terminata. Se questo è qualcosa che ha bisogno di correre costantemente, considerare lo spostamento questo in un processo di servizio al posto di una console app.

Risposto il 01/08/2008 a 13:55
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more