Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 22992|Odpoveď: 2

[Zdroj] Podrobné vysvetlenie viacerých spôsobov, ako vyriešiť problém programu v C#, ktorý umožňuje spustiť len jednu inštanciu

[Kopírovať odkaz]
Zverejnené 8. 12. 2016 13:11:13 | | |

Metóda 1:
Použi vláknové mutex premenné. Definujte mutex premenné na zistenie, či inštancia beží.
Zmeňte funkciu Main() v program.cs súbore na nasledujúci kód:




Poznámka: V programe príkaz System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); Na vytvorenie mutex premennej spustite premennú, kde "single_test" je mutex meno, a keď sa táto metóda vráti, ak je vytvorený lokálny mutex alebo špecifikovaný systém pomenovania mutex, booleovská hodnota runone je pravdivá; nepravda, ak už existuje špecifikovaný systém pomenovania mutexe. Pomenované mutexy sú systémovo rozšírené.
Metóda 2: Použite spôsob hodnotenia procesu, pred spustením programu zistíme, či je v procese proces s rovnakým názvom a či je bežiaca pozícia tiež rovnaký proces. Použite triedu Process v mennom priestore System.Diagnostics v C# na jej implementáciu, hlavný kód je nasledovný:
1. Pridajte funkciu do program.cs súboru nasledovne:




2. Zmeňte hlavnú () funkciu na nasledujúci kód:




Metóda 3: Globálna atómová metóda, pred vytvorením programu najprv skontrolujte globálnu atómovú tabuľku, či existuje konkrétny atóm A (pridaný pri vytvorení), a prestaňte ho vytvárať, keď existuje, čo znamená, že program spustil inštanciu; Ak neexistuje, spustite program a chcete pridať konkrétny atóm A do globálnej atómovej tabuľky; Pri ukončení programu nezabudnite uvoľniť konkrétny atóm A, inak nebude uvoľnený, kým nebude počítač vypnutý. Implementácia v C# je nasledovná:
1. Deklarovať funkčné rozhranie WinAPI

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalAddAtom(String lpString); Pridať atómy
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalFindAtom(String lpString); Nájdite atómy
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
verejný statický extern UInt32 GlobalDeleteAtom(UInt32 nAtom); Vymažte atómy
2. Upraviť funkciu Main() nasledovne:




3. Pridajte nasledujúci kód k udalosti FormClosed:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Vymažte atómové "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Vyššie uvedené je základná všeobecná myšlienka vytvorenia vzájomne vylučujúceho sa programu a osobne si myslím, že prvá metóda je najjednoduchšia.




Predchádzajúci:Rozdiel medzi Directory.GetCurrentDirectory a Application.StartupPath
Budúci:Rozdiel medzi profilom klienta .Net Framework4 a .Net Framework4.0
Zverejnené 10. 7. 2017 6:31:21 |
Ďakujem, že ste sa podelili
 Prenajímateľ| Zverejnené 23. 7. 2024 14:21:04 |
Programy v C# umožňujú len jednej inštancii spustiť správny kód
https://www.itsvse.com/thread-3391-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com