请问高手:怎样控制程序每次只能运行一个例程 怎么可以让程序自己判断自己是否被启动了 而使程序只启动一个程序对象 ?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最简单的方法是创建全局的互斥体CreateEvent 在Program.cs中添加如下代码: Boolean createdNew; //返回是否赋予了使用线程的互斥体初始所属权 System.Threading.Mutex instance = new System.Threading.Mutex(true, "MutexName", out createdNew); //同步基元变量 if (createdNew) //赋予了线程初始所属权,也就是首次使用互斥体 { Application.Run(new Form1()); /s/这句是系统自动写的 instance.ReleaseMutex(); } else { MessageBox.Show("已经启动了一个程序,请先退出!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Error); Application.Exit(); } 比如独占的模式打开某个文件bind一个端口 检查进程!system.diagnostics.Process process[] = system.diagnostics.Process.GetProcesses (); //返回所有的进程foreach遍历 简短方法实现软件仅打开一个实例的方法http://blog.csdn.net/madeinjack/archive/2008/03/17/2190657.aspx/**///// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main() ...{ //当<=1时 只能打开一个实例 if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length <= 1) ...{ Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new F_Main()); } else ...{ MessageBox.Show("程序已经打开!"); } } string MyModuleName = Process.GetCurrentProcess().MainModule.ModuleName; string MyProcessName = System.IO.Path.GetFileNameWithoutExtension(MyModuleName); Process[] MyProcesses = Process.GetProcessesByName(MyProcessName); if (MyProcesses.Length > 1) { MessageBox.Show("程序已经运行!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Close(); } 基于.Net平台应用程序唯一运行实例实现,我讲了三种方法,提供完整代码,同时分析他们的优缺点。http://blog.csdn.net/zhzuo/archive/2006/06/30/857405.aspxhttp://blog.csdn.net/zhzuo/archive/2006/07/04/874745.aspx 【C#调用Rar,实现压缩/解压缩】 子窗体问题 有关IE中直接打开word、excel、pdf等文档(是直接打开不需要下载提示,也不需要客户端修改IE安全设置) 为什么.net.Remoting总是不成功 有谁知道怎么编写接收温度传感器的数据的程序? C#中的数组问题 请问各位,同时保存关联DataTable问题? dateset中如何包含多个datatable,如何处理这些datatable!!?????? 急!C# 知道内存地址,如何读取数据显示到窗口? 字符串处理 Timer中有Thread.Sleep会影响间隔时间么? 有关于两个进程互斥的问题,急!!!!!
System.Threading.Mutex instance = new System.Threading.Mutex(true, "MutexName", out createdNew); //同步基元变量
if (createdNew) //赋予了线程初始所属权,也就是首次使用互斥体
{
Application.Run(new Form1()); /s/这句是系统自动写的
instance.ReleaseMutex();
}
else
{
MessageBox.Show("已经启动了一个程序,请先退出!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
Application.Exit();
}
bind一个端口
system.diagnostics.Process process[] = system.diagnostics.Process.GetProcesses (); //返回所有的进程
foreach遍历
/**///// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
...{
//当<=1时 只能打开一个实例
if (System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length <= 1)
...{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new F_Main());
}
else
...{
MessageBox.Show("程序已经打开!");
}
}
string MyProcessName = System.IO.Path.GetFileNameWithoutExtension(MyModuleName);
Process[] MyProcesses = Process.GetProcessesByName(MyProcessName);
if (MyProcesses.Length > 1)
{
MessageBox.Show("程序已经运行!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Close();
}
我讲了三种方法,提供完整代码,同时分析他们的优缺点。
http://blog.csdn.net/zhzuo/archive/2006/06/30/857405.aspx
http://blog.csdn.net/zhzuo/archive/2006/07/04/874745.aspx