Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 22992|Válasz: 2

[Forrás] Részletes magyarázat a C# program problémájának megoldására, amely csak egy példányt enged futtatni

[Linket másol]
Közzétéve 2016. 12. 08. 13:11:13 | | |

1. módszer:
Használj thread mutex változókat. Definiáljuk a mutex változókat, hogy megállapítsuk, fut-e egy példány.
A program.cs fájlban a Main() függvényt a következő kódra változtatni:




Megjegyzés: A programban a System.Threading.Mutex utasítás run = new System.Threading.Mutex(true, "single_test", out runone); Mutex változó létrehozásához futás, ahol a "single_test" a mutex név, és amikor ez a metódus visszatér, ha helyi mutex vagy meghatározott elnevezési rendszer keletkezik, a runone boolean érték true; hamis, ha a megadott nevezési rendszer mutexe már létezik. A nevelt mutexek rendszerszinten elérhetők.
2. módszer: A folyamat megítélésének módját használjuk, mielőtt elindítanánk a programot, megvizsgáljuk, hogy van-e ugyanolyan nevű folyamat, és a futó pozíció is ugyanaz a folyamat. Alkalmazzuk a Process osztályt a System.Diagnostics névtérben C#-ban a megvalósításhoz, a fő kód a következő:
1. Csatolj egy függvényt a program.cs fájlba a következőként:




2. Változtasd a fő () funkciót a következő kódokra:




3. módszer: Globális atom módszer, mielőtt programot készítsen, először ellenőrizze a globális atomtáblázatot, hogy van-e egy adott atom A (amelyet a létrehozáskor adtak be), majd akkor állítsuk abba, amikor az létezik, jelezve, hogy a program futtatott egy példányt; Ha nem létezik, indítsd a programot, és szeretnék hozzáadni egy adott atom A-t a globális atomtáblázatba; A programból való kilépéskor ne felejtsd el egy adott atom A-t felszabadítani, különben csak akkor szabadul, ha a számítógépet ki nem kapcsoljuk. A C# megvalósítás a következő:
1. Deklarálni a WinAPI funkcióinterfészt

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalAddAtom(String lpString); Atomok hozzáadása
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalFindAtom(string lpString); Találj atomokat
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
public static extern UInt32 GlobalDeleteAtom(UInt32 nAtom); Atomok törlése
2. Módosítsuk a Main() függvényt az alábbiak szerint:




3. Adja hozzá a következő kódot a FormClosed eseményhez:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Töröld az atomic "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
A fentiek az alapvető általános elképzelés egy egymást kizáró program létrehozásáról, és személy szerint úgy gondolom, hogy az első módszer a legegyszerűbb.




Előző:Különbség a Directory.GetCurrentDirectory és az Application.StartupPath között
Következő:A különbség a .Net Framework4 és a .Net Framework4.0 kliens profilja között
Közzétéve 2017. 07. 10. 6:31:21 |
Köszönöm, hogy megosztottad
 Háziúr| Közzétéve 2024. 07. 23. 14:21:04 |
A C# programok csak egy példánynak engedik a helyes kód futtatását
https://www.itsvse.com/thread-3391-1-1.html
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com