Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 22992|Odpověď: 2

[Zdroj] Podrobné vysvětlení několika způsobů, jak řešit problém programu v C#, který umožňuje spustit pouze jednu instanci

[Kopírovat odkaz]
Zveřejněno 08.12.2016 13:11:13 | | |

Metoda 1:
Používejte proměnné Thread Mutex. Definujte mutex proměnné, abyste zjistili, zda instance běží.
Změňte funkci Main() v souboru program.cs na následující kód:




Poznámka: V programu příkaz System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); Pro vytvoření mutex proměnné běží, kde "single_test" je mutex název, a když se tato metoda vrátí, pokud je vytvořen lokální mutex nebo specifikovaný systém pojmenování mutex, booleovská hodnota runone je pravdivá; nepravdivé, pokud již existuje specifikovaný systém pojmenovávání mutexe. Pojmenované mutexy jsou systémově rozšířené.
Metoda 2: Použijte způsob hodnocení procesu, před spuštěním programu zjistíme, zda v procesu existuje proces se stejným názvem a zda je běžící pozice také stejný proces. Použijte třídu Process v jmenném prostoru System.Diagnostics v C# pro její implementaci, hlavní kód je následující:
1. Přidejte funkci do program.cs souboru následovně:




2. Změňte hlavní funkci () na následující kód:




Metoda 3: Globální atomická metoda, před vytvořením programu nejprve zkontrolujte globální atomovou tabulku, zda existuje konkrétní atom A (přidaný při vytvoření), a přestaňte jej vytvářet, když existuje, což znamená, že program spustil instanci; Pokud neexistuje, spusťte program a chcete přidat konkrétní atom A do globální atomové tabulky; Při ukončení programu nezapomeňte uvolnit konkrétní atom A, jinak nebude uvolněn, dokud nebude počítač vypnutý. Implementace v C# je následující:
1. Deklarovat rozhraní funkce WinAPI

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalAddAtom(String lpString); Přidat atomy
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalFindAtom(String lpString); Najdi atomy
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
veřejný statický extern UInt32 GlobalDeleteAtom(UInt32 nAtom); Smazat atomy
2. Upravte funkci Main() následovně:




3. Přidejte následující kód k události FormClosed:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Smažte atomové "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Výše uvedené je základní obecná myšlenka vytvoření vzájemně se vylučujícího programu a osobně si myslím, že první metoda je nejjednodušší.




Předchozí:Rozdíl mezi Directory.GetCurrentDirectory a Application.StartupPath
Další:Rozdíl mezi klientským profilem .Net Framework4 a .Net Framework4.0
Zveřejněno 10.07.2017 6:31:21 |
Děkuji, že jste se podělili
 Pronajímatel| Zveřejněno 23.07.2024 14:21:04 |
Programy v C# umožňují pouze jedné instanci spustit správný kód
https://www.itsvse.com/thread-3391-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com