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

Άποψη: 22992|Απάντηση: 2

[Πηγή] Λεπτομερής επεξήγηση πολλών τρόπων επίλυσης του προβλήματος ενός προγράμματος C# που επιτρέπει την εκτέλεση μόνο μιας παρουσίας

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 8/12/2016 1:11:13 μ.μ. | | |

Μέθοδος 1:
Χρησιμοποιήστε μεταβλητές thread mutex. Ορίστε μεταβλητές mutex για να προσδιορίσετε εάν εκτελείται μια παρουσία.
Αλλάξτε τη συνάρτηση Main() στο αρχείο program.cs στον ακόλουθο κώδικα:




Σημείωση: Στο πρόγραμμα, η δήλωση System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); για να δημιουργήσετε μια εκτέλεση μεταβλητής mutex, όπου "single_test" είναι το όνομα mutex και όταν επιστρέψει αυτή η μέθοδος, εάν δημιουργηθεί ένα τοπικό mutex ή ένα καθορισμένο σύστημα ονομασίας mutex, η δυαδική τιμή runone είναι αληθής. false εάν το καθορισμένο σύστημα ονομασίας mutexe υπάρχει ήδη. Τα επώνυμα mutexe είναι σε όλο το σύστημα.
Μέθοδος 2: Χρησιμοποιήστε τον τρόπο κρίσης της διαδικασίας, πριν εκτελέσουμε το πρόγραμμα, βρίσκουμε εάν υπάρχει μια διαδικασία με το ίδιο όνομα στη διαδικασία και η θέση εκτέλεσης είναι επίσης η ίδια διαδικασία. Εφαρμόστε την κλάση Process στο χώρο ονομάτων System.Diagnostics στο C# για να την εφαρμόσετε, ο κύριος κώδικας είναι ο εξής:
1. Προσθέστε μια συνάρτηση στο αρχείο program.cs ως εξής:




2. Αλλάξτε τη συνάρτηση Main () στον ακόλουθο κώδικα:




Μέθοδος 3: Καθολική ατομική μέθοδος, πριν δημιουργήσετε ένα πρόγραμμα, ελέγξτε πρώτα τον παγκόσμιο ατομικό πίνακα για να δείτε εάν υπάρχει ένα συγκεκριμένο άτομο Α (προστέθηκε τη στιγμή της δημιουργίας) και σταματήστε να το δημιουργείτε όταν υπάρχει, υποδεικνύοντας ότι το πρόγραμμα έχει εκτελέσει μια παρουσία. Εάν δεν υπάρχει, εκτελέστε το πρόγραμμα και θέλετε να προσθέσετε ένα συγκεκριμένο άτομο Α στον παγκόσμιο ατομικό πίνακα. Κατά την έξοδο από το πρόγραμμα, θυμηθείτε να απελευθερώσετε ένα συγκεκριμένο άτομο Α, διαφορετικά δεν θα απελευθερωθεί μέχρι να απενεργοποιηθεί ο υπολογιστής. Η υλοποίηση C# έχει ως εξής:
1. Δηλώστε τη διεπαφή λειτουργίας WinAPI

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
δημόσιο στατικό εξωτερικό UInt32 GlobalAddAtom(String lpString); Προσθήκη ατόμων
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
δημόσιο στατικό εξωτερικό UInt32 GlobalFindAtom(String lpString); Βρείτε άτομα
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
δημόσιο στατικό εξωτερικό UInt32 GlobalDeleteAtom(UInt32 nAtom); Διαγραφή ατόμων
2. Τροποποιήστε τη συνάρτηση Main() ως εξής:




3. Προσθέστε τον ακόλουθο κώδικα στο συμβάν FormClosed:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Διαγραφή ατομικού "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Τα παραπάνω είναι η βασική γενική ιδέα της δημιουργίας ενός αμοιβαία αποκλειόμενου προγράμματος και προσωπικά πιστεύω ότι η πρώτη μέθοδος είναι η απλούστερη.




Προηγούμενος:Διαφορά μεταξύ Directory.GetCurrentDirectory και Application.StartupPath
Επόμενος:Η διαφορά μεταξύ του προφίλ πελάτη .Net Framework4 και .Net Framework4.0
Δημοσιεύτηκε στις 10/7/2017 6:31:21 π.μ. |
Σας ευχαριστούμε που μοιραστήκατε
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 23/7/2024 2:21:04 μ.μ. |
Τα προγράμματα C# επιτρέπουν μόνο σε μία παρουσία να εκτελεί τον σωστό κώδικα
https://www.itsvse.com/thread-3391-1-1.html
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com