【发布时间】:2011-10-26 04:06:13
【问题描述】:
我正在尝试使用互斥锁实现单实例应用程序。 应用程序只能从给定目录运行一个实例。 我试图在 Applicationsevents 类中实现它,但它不起作用。
我用一个单一表格的测试工具复制了它。 我的 ApplicationEvents.vb 代码:
Private Sub SingleInstanceCheck(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
Dim strLoc As String = Assembly.GetExecutingAssembly().Location
Dim fileInfo As IO.FileSystemInfo = New IO.FileInfo(strLoc)
Dim sExeName As String = fileInfo.Name
strLoc = strLoc.Replace("\", "//")
Using mutex As New Threading.Mutex(False, "Global\" + strLoc)
If Not mutex.WaitOne(0, False) Then
File.WriteAllText("c:\log.txt", "instance already running")
Environment.Exit(1)
End If
GC.Collect()
End Using
End Sub
它运行多个实例。
我无法改变的事情: 1.项目设置有“启用应用程序框架”打勾 2. ApplicationEvents.vb 处理 UnhandleException 这意味着我不能有一个模块作为启动。
请帮帮忙!!!
【问题讨论】:
-
虽然与您的问题没有直接关系,但您应该非常小心手动调用 GC.Collect,它几乎总是会导致垃圾收集器的性能比其他情况下更差。