Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 22992|Atsakyti: 2

[Šaltinis] Išsamus kelių būdų, kaip išspręsti C# programos, leidžiančios paleisti tik vieną egzempliorių, problemą

[Kopijuoti nuorodą]
Paskelbta 2016-12-08 13:11:13 | | |

1 metodas:
Naudokite gijos mutex kintamuosius. Apibrėžkite mutex kintamuosius, kad nustatytumėte, ar egzempliorius veikia.
Pakeiskite program.cs failo funkciją Main() į šį kodą:




Pastaba: Programoje teiginys System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); sukurti mutex kintamojo vykdymą, kur "single_test" yra mutex pavadinimas, ir kai šis metodas grįžta, jei sukuriamas vietinis mutex arba nurodyta pavadinimų sistemos mutex, loginė reikšmė runone yra true; False, jei nurodytas pavadinimų suteikimo sistemos mutexe jau yra. Pavadinti muteksai yra visoje sistemoje.
2 būdas: Naudokite proceso vertinimo būdą, prieš paleisdami programą, išsiaiškiname, ar procese yra procesas tuo pačiu pavadinimu, o bėgimo padėtis taip pat yra tas pats procesas. Norėdami ją įgyvendinti, pritaikykite "Process" klasę "System.Diagnostics" vardų srityje C#, pagrindinis kodas yra toks:
1. Pridėkite funkciją prie program.cs failo taip:




2. Pakeiskite funkciją Main () į šį kodą:




3 metodas: Pasaulinis atominis metodas, prieš kurdami programą, pirmiausia patikrinkite pasaulinę atominę lentelę, kad pamatytumėte, ar yra konkretus atomas A (pridėtas kūrimo metu), ir nustokite jį kurti, kai jis egzistuoja, nurodydami, kad programa paleido egzempliorių; Jei jo nėra, paleiskite programą ir norite pridėti konkretų atomą A į pasaulinę atominę lentelę; Išeidami iš programos nepamirškite išleisti konkretaus atomo A, kitaip jis nebus išleistas, kol kompiuteris nebus išjungtas. C# įgyvendinimas yra toks:
1. Deklaruokite WinAPI funkcijos sąsają

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
viešasis statinis išorinis UInt32 GlobalAddAtom(String lpString); Pridėti atomus
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
viešasis statinis išorinis UInt32 GlobalFindAtom(String lpString); Raskite atomus
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
viešasis statinis išorinis UInt32 GlobalDeleteAtom(UInt32 nAtom); Ištrinti atomus
2. Pakeiskite funkciją Main() taip:




3. Pridėkite šį kodą prie FormClosed įvykio:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Naikinti atominį "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Tai yra pagrindinė bendra idėja sukurti abipusiai nesuderinamą programą, ir aš asmeniškai manau, kad pirmasis metodas yra paprasčiausias.




Ankstesnis:Skirtumas tarp Directory.GetCurrentDirectory ir Application.StartupPath
Kitą:Skirtumas tarp .Net Framework4 ir .Net Framework4.0 kliento profilio
Paskelbta 2017-07-10 06:31:21 |
Dėkojame, kad dalijatės
 Savininkas| Paskelbta 2024-07-23 14:21:04 |
C# programos leidžia tik vienam egzemplioriui paleisti teisingą kodą
https://www.itsvse.com/thread-3391-1-1.html
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com