程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 創建互斥程序_只允許運行一個程序實例

C# 創建互斥程序_只允許運行一個程序實例

編輯:C#入門知識

C# 創建互斥進程(程序) 互斥進程(程序), 簡單點說,就是在系統中只能有該程序的一個實例運行. 現在很多軟件都有這功能.

要實現程序的互斥,通常有下面幾種方式,下面用 C# 語言來實現:

方法一:

     使用線程互斥變量. 通過定義互斥變量來判斷是否已運行實例.
把program.cs文件裡的Main()函數改為如下代碼:

\\代碼
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace NetTools
{
static class Program
{

[DllImport("user32.dll")]
private static extern bool FlashWindow(IntPtr hWnd, bool bInvert);

[DllImport("user32.dll")]
private static extern bool FlashWindowEx(int pfwi);

/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
bool runone;
System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone);
if (runone)
{
run.ReleaseMutex();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
FrmRemote frm = new FrmRemote();
int hdc = frm.Handle.ToInt32(); // write to ...
Application.Run(frm);
IntPtr a = new IntPtr(hdc);
}
else
{
MessageBox.Show("已經運行了一個實例了。");
//IntPtr hdc = new IntPtr(1312810); // read from...
//bool flash = FlashWindow(hdc, true);
}

}
}
}

說明:程序中通過語句 System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone);來創建一個互斥體變量run,其中"single_test"為互斥體名,在此方法返回時,如果創建了局部互斥體或指定的命名系統互斥體,則布爾值runone為true;如果指定的命名系統互斥體已存在,則為 false。已命名的互斥體是系統范圍的。

方法二:采用判斷進程的方式,我們在運行程序前,查找進程中是否有同名的進程,同時運行位置也相同程,如是沒有運行該程序,如果有就就不運行.在C#中應用System.Diagnostics名字空間中的Process類來實現,主要代碼如下:
1,在program.cs文件中添加函數如下:

\\代碼
						

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved