怎么可以让程序自己判断自己是否被启动了   
  而使程序只启动一个程序对象   ??

解决方案 »

  1.   

    最简单的方法是创建全局的互斥体CreateEvent
      

  2.   

    在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();
                }
      

  3.   

    比如独占的模式打开某个文件
    bind一个端口
      

  4.   

    检查进程!
    system.diagnostics.Process process[] = system.diagnostics.Process.GetProcesses (); //返回所有的进程
    foreach遍历
      

  5.   

    简短方法实现软件仅打开一个实例的方法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("程序已经打开!");
           }
     } 
      

  6.   

      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();
                }
      

  7.   

    基于.Net平台应用程序唯一运行实例实现,
    我讲了三种方法,提供完整代码,同时分析他们的优缺点。
    http://blog.csdn.net/zhzuo/archive/2006/06/30/857405.aspx
    http://blog.csdn.net/zhzuo/archive/2006/07/04/874745.aspx