Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 19013|Απάντηση: 0

[Πηγή] Η C# επιτρέπει τη σωστή εγγραφή μόνο μιας παρουσίας της εφαρμογής

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 10/12/2016 2:35:34 μ.μ. | | |
Τα προγράμματα C# επιτρέπουν μόνο σε μία παρουσία να εκτελεί τον σωστό κώδικα
http://www.itsvse.com/thread-3391-1-1.html
(Πηγή: Αρχιτέκτονας)


Ο παρακάτω κώδικας είναι επίσης λάθος!! Σωστός κωδικός όπως παραπάνω!!


Μερικές φορές χρειάζεται να επιτρέψουμε την εκτέλεση μόνο μιας παρουσίας της εφαρμογής και όταν ξεκινήσει η διαδικασία, εάν διαπιστώσει ότι εκτελείται μια παρουσία της εφαρμογής, θα σταματήσει αυτόματα να εκτελείται. Συνήθως το υλοποιούμε στην κύρια συνάρτηση μέσω ενός Mutex mutex, το οποίο συνήθως γράφεται:

Όταν αναζητούμε απαντήσεις, συχνά πηγαινοερχόμαστε βιαστικά, αγνοώντας τα χαρακτηριστικά και τις προφυλάξεις του Mutex. Μετά από ένα απλό τεστ, ΟΚ, πάρτε το και χρησιμοποιήστε το. Σε αυτό το σημείο, παραβλέπουμε μια σημαντική προϋπόθεση:Συμβάσεις ονομασίας Mutex. Η παραπάνω μέθοδος γραφής λειτουργεί χωρίς προβλήματα σε έναν μόνο χρήστη. Στην περιοχή πολλών χρηστών, κάθε χρήστης μπορεί να ξεκινήσει μία παρουσία, επομένως δεν είναι εγγυημένη μια μεμονωμένη παρουσία.

Εάν πρέπει να το χρησιμοποιήσετε σε ένα διακομιστή τερματικού και να επιτρέψετε μόνο μία παρουσία, χρησιμοποιήστε την ακόλουθη μέθοδο:


Ακολουθεί η περιγραφή του MSDN:


Σε διακομιστές που εκτελούν υπηρεσίες τερματικού, το όνομα system mutex μπορεί να έχει δύο επίπεδα ορατότητας. Αν το όνομα αρχίζει με το πρόθεμα "Global\", το mutex είναι ορατό σε όλες τις συνεδρίες του εξυπηρετητή τερματικού. Εάν το όνομα ξεκινά με το πρόθεμα "Local\", το mutex είναι ορατό μόνο στην περίοδο λειτουργίας του διακομιστή τερματικού που το δημιούργησε. Σε αυτήν την περίπτωση, κάθε άλλη περίοδος λειτουργίας διακομιστή τερματικού στο διακομιστή μπορεί να έχει ξεχωριστό mutex με το ίδιο όνομα. Εάν δημιουργήσετε ένα όνομα mutex χωρίς να καθορίσετε ένα πρόθεμα, θα πάρει το πρόθεμα "Local\". Σε μια περίοδο λειτουργίας διακομιστή τερματικού, δύο mutex με διαφορετικά προθέματα ονόματος είναι ανεξάρτητα mutex και τα δύο mutex είναι ορατά σε όλες τις διεργασίες στην περίοδο λειτουργίας του διακομιστή τερματικού. Δηλαδή, τα ονόματα προθέματος "Global" και "Local" περιγράφουν το εύρος του ονόματος mutex σε σχέση με την περίοδο λειτουργίας του τερματικού διακομιστή και όχι με τη διαδικασία.






Προηγούμενος:Η καταχώριση στοιχείων για διαλειτουργικότητα COM είναι απενεργοποιημένη
Επόμενος:Τα προγράμματα C# επιτρέπουν μόνο σε μία παρουσία να εκτελεί τον σωστό κώδικα
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com