Mutex构造函数,第一个参数获得所有权,第二个参数是互斥变量名,第三个是新建true,还是false已存在? 需要注意的是,即使Mutex对象不是新创建的,也必须释放它。 否则,下一次获取将返回现有的
ToolMutex.Exist适合于确定互斥是否已经存在,不创建互斥对象,并且检查是否完成了任何操作
IsFirst确定是否第一次运行,创建独占对象,再次调用时返回false; Close关闭当前独占的对象。 可以在进程的不同线程上多次运行IsFirst和Close
用户系统; using system.collections.generic; using System.Linq; using system.runtime.interop services; using系统. security.access control; using System.Text; namespacelibcsharpsyntax.OS { publicclasstoolmutex } system.threading.mutex mutex=null; ///summary ///确定程序是否正在运行////summary ///param name=’appId ‘程序名称/param ///returns程序首次运行if(BExistmutex.waitone(1) ) { return true; (else ) relase ); 返回假; } # regionopenmutex//if (open mutex (0x1f 0001,0,appId )====IntPtr.Zero(/(//createmutex ) ) intptr.zero//返回ret; # endregion } publicstaticboolexist (字符串应用ppid ) { bool bExist=false; varlocalmutex=new system.threading.mutex (false,appId,out bExist ); localmutex.Close (; localmutex.Dispose (; local mutex=空; 返回! 乙退出; }私密void relase () if ) mutex!=null () { mutex.Close ); mutex.Dispose (; mutex=null; (//summary//占用////summary public void Close ) ) if ) mutex!=null () { mutex.ReleaseMutex; Relase (; } # regionopenmutex//var handle=open mutex (0x1f 0001,0,appId ); //if (手持!=intptr.zero(//)/releasemutex ) (handle ); //} # endregion } # region windows API//[ dllimport (‘ kernel32.dll ),charset=charset.auto (//privatestaticexextex )/access///intbinherithanddess//[ dllimport (kernel32.dll ), CharSet=CharSet.Auto ) ]//privatestaticexternintptrcreatemutex )//intptrlpmuter//SD//int binitialowner,//initial //[dllimport(Kernel32.dll ),EntryPoint=’ReleaseMutex ),setlasterror=true ]//privatestaticexternintreleateate