Vă mulțumim pentru susținere

Cronometru fiabil într-o aplicație consola

Sunt conștient de faptul că în .NET există trei tipuri de cronometre (a se vedea Compararea claselor de cronometrare din Biblioteca de clasă .NET Framework ). Am ales un cronometru cu filet, pe măsură ce alte tipuri se pot deplasa dacă firul principal este ocupat și am nevoie ca acesta să fie fiabil.

Modul în care funcționează acest timer în controlul temporizatorului este pus pe alt fir, astfel încât acesta să poată bifa întotdeauna împreună cu începerea lucrului finalizat pe firul părinte atunci când nu este ocupat.

Problema cu acest cronometru într-o aplicație consola este că, în timp ce timerul bate pe un alt fir, firul principal nu face nimic, astfel încât aplicația se închide.

Am încercat să adaug o buclă în timp ce este adevărat , dar firul principal este prea ocupat atunci când temporizatorul nu mai funcționează.

0
adăugat editat

2 răspunsuri

Puteți folosi ceva de genul Console.ReadLine () pentru a bloca firul principal, astfel încât alte fire de fundal (cum ar fi firele temporizatorului) vor funcționa în continuare. De asemenea, puteți utiliza AutoResetEvent pentru a bloca execuția, (atunci când este necesar) puteți apela metoda Set () pe acel obiect AutoResetEvent pentru a elibera firul principal. De asemenea, asigurați-vă că referința dvs. la obiectul Timer nu iese din domeniul de aplicare și se colectează gunoi.

0
adăugat

Luați în considerare utilizarea unui ManualResetEvent pentru a blocați firul principal la sfârșitul prelucrării sale și apelați Reset () pe acesta după terminarea procesării cronometrului. Dacă aceasta este o problemă care trebuie executată în mod constant, luați în considerare transferarea acesteia într-un proces de serviciu în locul unei aplicații consola.

0
adăugat