Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 22992|Atbildi: 2

[Avots] Detalizēts skaidrojums par vairākiem veidiem, kā atrisināt C# programmas problēmu, kas ļauj darboties tikai vienai instancei

[Kopēt saiti]
Publicēts 08.12.2016 13:11:13 | | |

1. metode:
Izmantojiet pavediena mutex mainīgos. Definējiet mutex mainīgos, lai noteiktu, vai instance darbojas.
Main() failā program.cs mainiet uz šādu kodu:




Piezīme: Programmā paziņojums System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); lai izveidotu mutex mainīgo izpildi, kur "single_test" ir mutex nosaukums, un, kad šī metode atgriežas, ja tiek izveidots lokālais mutex vai norādīta nosaukumu sistēmas mutex, būla vērtība runone ir true; FALSE, ja norādītā nosaukumu sistēmas mutexe jau pastāv. Nosauktie muteksi ir sistēmas mērogā.
2. metode: Izmantojiet procesa vērtēšanas veidu, pirms mēs palaižam programmu, mēs noskaidrojam, vai procesā ir process ar tādu pašu nosaukumu, un arī darbības pozīcija ir tāds pats process. Lai to īstenotu, izmantojiet klasi Process System.Diagnostics nosaukumtelpā C#, galvenais kods ir šāds:
1. Pievienojiet funkciju program.cs failam šādi:




2. Mainiet funkciju Main () uz šādu kodu:




3. metode: Globālā atomu metode, pirms programmas izveides vispirms pārbaudiet globālo atomu tabulu, lai redzētu, vai ir konkrēts atoms A (pievienots izveides laikā), un pārtrauciet tā izveidi, kad tas pastāv, norādot, ka programma ir palaidusi instanci; Ja tā nepastāv, palaidiet programmu un vēlaties pievienot konkrētu atomu A globālajai atomu tabulai; Izejot no programmas, atcerieties atbrīvot konkrētu atomu A, pretējā gadījumā tas netiks atbrīvots, kamēr dators nav izslēgts. C# ieviešana ir šāda:
1. Deklarējiet WinAPI funkcijas interfeisu

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publiskais statiskais ārējais UInt32 GlobalAddAtom(String lpString); Pievienot atomus
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publiskais statiskais ārējais UInt32 GlobalFindAtom(String lpString); Atrodiet atomus
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publiskais statiskais ārējais UInt32 GlobalDeleteAtom(UInt32 nAtom); Dzēst atomus
2. Modificējiet funkciju Main() šādi:




3. Pievienojiet šādu kodu notikumam FormClosed:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Dzēst atomu "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Iepriekš minētais ir pamata vispārējā ideja par savstarpēji izslēdzošas programmas izveidi, un es personīgi domāju, ka pirmā metode ir visvienkāršākā.




Iepriekšējo:Atšķirība starp Directory.GetCurrentDirectory un Application.StartupPath
Nākamo:Atšķirība starp .Net Framework4 un .Net Framework4.0 klienta profilu
Publicēts 10.07.2017 06:31:21 |
Paldies, ka dalījāties
 Saimnieks| Publicēts 23.07.2024 14:21:04 |
C# programmas ļauj tikai vienai instancei palaist pareizo kodu
https://www.itsvse.com/thread-3391-1-1.html
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com