Heim > Artikel > Backend-Entwicklung > C# erlaubt nur zwei Möglichkeiten, einen WinFrom-Prozess zu starten
Methode 1: Nur die Ausführung mehrerer Prozesse verhindern
Klarkopie in Zwischenablage anzeigenPRint?
·········10·········20···· · ···30········40········50········60·········70········ 80· ·······90········100·······110·······120········130······ ·140· ······150
[STAThread]
public static void Main()
{
bool ret;
System.Threading.Mutex mutex = new System.Threading. Mutex(true , application.ProductName, out ret);
if (ret)
{ System.Windows.Forms.Application.EnableVisualStyles(); //Diese beiden Zeilen implementieren den visuellen XP-Stil
System .Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new Main());
// Main ist das Hauptformular Ihres Programms, tun Sie es Diesen Satz nicht verwenden Dieses Programm wird gerade beendet.
Application.Exit();//Programm verlassen .Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
if (ret)
{
System.Windows.Forms.Application.EnableVisualStyles(); / /Diese beiden Zeilen implementieren den visuellen XP-Stil
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run( new Main());
// Main ist die Hauptform Ihres Programms. Wenn es sich um ein Konsolenprogramm handelt, verwenden Sie diesen Satz nicht
Die gleiche Anwendung wird bereits ausgeführt. Bitte führen Sie nicht mehrere Programme gleichzeitig aus Gleichzeitig wird dieses Programm beendet. ", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
// Eingabeaufforderung, kann gelöscht werden.
Application.Exit();//Beenden Sie das Programm
}
}
Methode 2: Deaktivieren Sie die Ausführung mehrerer Prozesse und aktivieren Sie den vorherigen Prozess bei wiederholter Ausführung
Klarkopie in Zwischenablage anzeigen und drucken?
·········10········20·········30········40 · ········50·········60········70········80·········90·· ···· ··100········110········120········130········140······· 150
[STAThread]
public static void Main()
{ //Laufende Instanz abrufen = RunningInstance();
if (instance == null)
{ System .Windows.Forms.Application.EnableVisualStyles(); //Diese beiden Zeilen implementieren den visuellen XP-Stil
System.Windows.Forms.Application.DoEvents();
//Es gibt keine andere Instanz, zeigen unser Formular.
Application.Run(new Main());
}
else
{
//Es gibt eine weitere Instanz dieses Prozesses.
HandleRunningInstance(instance);
}
}
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] Prozesse = Process.GetProcessesByName(current.ProcessName);
//Schleife durch die laufenden Prozesse in mit dem gleichen Namen Prozess
if (process.Id != current. Id)
{
//Stellen Sie sicher, dass der Prozess von der exe-Datei ausgeführt wird.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") ==. current.MainModule.FileName)
tanz.
Rückgabeprozess;
}
}
}
//Keine andere Instanz wurde gefunden, gibt null zurück.
null zurückgeben; owHandle, WS_SHOWNORMAL);
//Setze die echte Instanz auf das Vordergrundfenster
SetForegroundWindow(instance.MainWindowHandle);
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
[STAThread]
public static void Main()
{
//Holen Sie sich die laufende Instanz.
Prozessinstanz = RunningInstance();
if (instance == null)
{
System.Windows.Forms.Application.EnableVisualStyles(); //这两行实现 XP 可视风格
System.Windows.Forms.Application.DoEvents();
//Es gibt keine andere Instanz, zeige unser Formular.
Application.Run(new Main());
}
else
{
//Es gibt eine weitere Instanz dieses Prozesses.
# .GetProcessesByName(current.ProcessName);
//Schleife durch die laufenden Prozesse in mit dem gleichen Namen
foreach (Prozessprozess in. Prozesse)
{
//Ignorieren der aktueller Prozess
falls (process.Id != current.Id)
{
//Stellen Sie sicher, dass der Prozess von der exe-Datei aus ausgeführt wird.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
{
//Gib die andere Prozessinstanz zurück.
Rückgabeprozess;
WindowHandle, WS_SHOWNORMAL) ;
//Setze die echte Instanz auf Vordergrundfenster
SetForegroundWindow(instance.MainWindowHandle);
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1;
以上就是C#只允许启动一个WinFrom进程的两种方法的内容,更多相关内容请关注PHP中文网(www.php.cn)!