·天新网首页·加入收藏·设为首页
首页|笔记本|手机|数码相机|摄像机|MP3/MP4|主板|内存|显示器|办公|打印机|下载|开发|汽车|学院|业界
硬件|台式机|数码|数字家庭|投影仪|GPS/CPU|显卡|硬盘|服务器|网络|一体机|驱动|源码|游戏|考试|报价
您现在的位置:天新网 > 软件开发 > 开发文摘 > .Net文摘
关于程序运行一次的三种方法
http://dev.21tx.com 2005年08月04日 Blog lovevsnet

经常在网上看到有人问“如何让自己程序只运行一个实例"的问题

我把以前给网友的回答总结一下:

1。

   #region Mutex对象
   Mutex mt=new Mutex(true,"MutexInstance");
   if(mt.WaitOne(0,false))
   Application.Run(new runonce());
   else
   MessageBox.Show("您的程序已经在运行了,不能运行两个实例!");
   #endregion
2。

   #region Process方法
   Int32 _isProcessRunning;
   _isProcessRunning = System.Diagnostics.Process.GetProcessesByName(
    System.Diagnostics.Process.GetCurrentProcess().ProcessName).Length;
   if(_isProcessRunning != 1)
   {
    MessageBox.Show("您的程序已经在运行了,不能运行两个实例!");
   }
   else
    Application.Run(new runonce());
   #endregion
3。

  [DllImport("kernel32")]
  private static extern int GetLastError();
   [DllImport("kernel32")]
  private static extern int ReleaseMutex(IntPtr hMutex);
 [DllImport("kernel32")]
  private static extern IntPtr CreateMutex(SECURITY_ATTRIBUTES lpMutexAttributes,bool bInitialOwner,string lpName);
  [StructLayout( LayoutKind.Sequential)]
   public class SECURITY_ATTRIBUTES
  {
   public int nLength;
   public int lpSecurityDescriptor;
   public int bInheritHandle;
  }
 const int ERROR_ALREADY_EXISTS = 0183;
//-------------------------------------------------------------------------

   #region Api_Call CreateMutex
   IntPtr hMutex;
   hMutex=CreateMutex(null,false,"MutexInstance");
   if (GetLastError()!=ERROR_ALREADY_EXISTS)
   {
    Application.Run(new runonce());
   }
   else
   {
    MessageBox.Show("本程序只允许同时运行一个");
    ReleaseMutex(hMutex);
   }
   #endregion

上一篇: C# FAQ for C++ programmers
下一篇: 开发手记(四)——运用VB实战破解ACCESS密码

Google
 
热点文章
关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
晨新科技 版权所有 Created by TXSite.net