Αξιόπιστη χρονοδιακόπτη σε μια εφαρμογή κονσόλας

ψήφοι
78

Γνωρίζω ότι το .NET υπάρχουν τρεις τύποι χρονοδιακόπτη (βλ Συγκρίνοντας τα Μαθήματα χρονόμετρο στο .NET Framework Class Library ). Έχω επιλέξει ένα κοχλιωτό χρονόμετρο με τους άλλους τύπους μπορεί να παρασύρει εάν το κύριο νήμα είναι απασχολημένος, και πρέπει αυτό να είναι αξιόπιστα.

Ο τρόπος με τον χρονόμετρο λειτουργεί στον έλεγχο του χρονοδιακόπτη τίθεται σε άλλο νήμα, ώστε να μπορεί πάντα να τσεκάρετε μαζί με το έργο αρχίζουν ολοκληρωθεί η μητρική νήμα, όταν δεν είναι απασχολημένος.

Το πρόβλημα με αυτό το χρονόμετρο σε μια εφαρμογή κονσόλας είναι ότι, ενώ το χρονόμετρο τρέχει μαζί σε ένα άλλο νήμα το κύριο νήμα δεν κάνει τίποτα ώστε η εφαρμογή κλείνει.

Προσπάθησα προσθέτοντας ένα while trueβρόχο, αλλά στη συνέχεια το κύριο νήμα είναι πολύ απασχολημένος, όταν το χρονόμετρο δεν πάει μακριά.

Δημοσιεύθηκε 01/08/2008 στις 13:43
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
50

Μπορείτε να χρησιμοποιήσετε κάτι σαν Console.ReadLine()να εμποδίσει το κύριο νήμα, έτσι ώστε άλλα θέματα φόντου (όπως τα θέματα χρονοδιακόπτη) θα συνεχίσει να λειτουργεί. Μπορείτε επίσης να χρησιμοποιήσετε ένα AutoResetEvent να εμποδίσει την εκτέλεση, στη συνέχεια (όταν πρέπει να) μπορείτε να καλέσετε τη μέθοδο Set () για αυτό το αντικείμενο AutoResetEvent να απελευθερώσει το κύριο νήμα. Επίσης, βεβαιωθείτε ότι η αναφορά σας για να Timer αντικείμενο δεν βγαίνουν από το πεδίο εφαρμογής και τα σκουπίδια συλλέγονται.

Απαντήθηκε 01/08/2008 στις 13:56
πηγή χρήστη

ψήφοι
17

Σκεφτείτε να χρησιμοποιήσετε ένα ManualResetEvent να μπλοκάρει το κύριο νήμα στο τέλος της επεξεργασίας του, και να ζητήσει Reset()για μια φορά την επεξεργασία του χρονομετρητή έχει τελειώσει. Αν αυτό είναι κάτι που πρέπει να τρέχει συνεχώς, να εξετάσει τη μεταφορά αυτή σε μια διαδικασία υπηρεσίας αντί για εφαρμογή κονσόλας.

Απαντήθηκε 01/08/2008 στις 13:55
πηγή χρήστη

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