Domanda

Sono consapevole che dentro .NETTO ci sono tre tipi di timer (vedi Confronto delle classi timer nella libreria di classi .NET Framework).Ho scelto un timer con thread poiché gli altri tipi possono andare alla deriva se il thread principale è occupato e ho bisogno che sia affidabile.

Il modo in cui funziona questo timer nel controllo del timer viene inserito in un altro thread in modo che possa sempre ticchettare insieme all'inizio del lavoro completato sul thread principale quando non è occupato.

Il problema con questo timer in un'applicazione console è che mentre il timer scorre su un altro thread, il thread principale non fa nulla alla chiusura dell'applicazione.

Ho provato ad aggiungere a while true loop, ma il thread principale è troppo occupato quando il timer si spegne.

È stato utile?

Soluzione

Puoi usare qualcosa del genere Console.ReadLine() per bloccare il thread principale, in modo che altri thread in background (come i thread del timer) continuino a funzionare.Puoi anche usare un Evento di ripristino automatico per bloccare l'esecuzione, quindi (quando necessario) puoi chiamare il metodo Set() su quell'oggetto AutoResetEvent per rilasciare il thread principale.Assicurati inoltre che il tuo riferimento all'oggetto Timer non esca dall'ambito e dalla raccolta dei rifiuti.

Altri suggerimenti

Considera l'utilizzo di a Evento di ripristino manuale per bloccare il thread principale al termine della sua elaborazione e chiamare Reset() su di esso una volta terminata l'elaborazione del timer.Se si tratta di qualcosa che deve essere eseguito costantemente, valuta la possibilità di spostarlo in un processo di servizio anziché in un'app console.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top