再问关于“生成单个应用程序实例”的问题
刚才在论坛中找了一下,发现有人提供如下代码:
<STAThread()> Shared Sub main(ByVal cmdargs() As String)
Dim createdNew As Boolean '返回是否赋予使用线程的互斥体初始所属权
Dim Instance As System.Threading.Mutex '同步基元变量
Instance = New System.Threading.Mutex(True, "MutexName ", createdNew)
If createdNew Then '赋予了线程初始所属权,也就是首次使用互斥体
System.Windows.Forms.Application.Run(New Form1) '运行程序
Instance.ReleaseMutex() '释放Mutex一次
Else
MessageBox.Show( "该程序已经启动 ", "禁止启动多个实例 ", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Application.Exit()
End If
End Sub
我把如上代码分别放到Form1.Desinger.vb和Form1.vb中均没有效果。烦请高手能详细告知。
另外如何再次大开程序的时候让已经打开的程序成为当前窗体。
[解决办法]
我是这样做的
在模块中写
'For single instance
Public Function CheckNimsRunning() As Integer
Dim pTmp As Process() = Process.GetProcesses()
Dim pCurrent As Process = Process.GetCurrentProcess()
If (pTmp.Length > 0) Then
Dim i As Integer
While (i < pTmp.Length)
If (pTmp(i).Id > 4) Then
If (pTmp(i).Id <> pCurrent.Id) Then
'If (pTmp(i).MainModule.ModuleName = pCurrent.MainModule.ModuleName) Then
If (pTmp(i).ProcessName = pCurrent.ProcessName) Then
Return (pTmp(i).Id)
End If
End If
End If
i = i + 1
End While
End If
Return (0)
End Function
然后在入口的 Form_Load 中合适的位置写入下代码
'For single instance
Dim pNimsID As Integer = CheckNimsRunning()
If (pNimsID > 0) Then
AppActivate(pNimsID)
Me.Close()
Exit Sub
End If
[解决办法]
而且貌似在 Project 的属性中,应用程序选项下有个 “启用应用程序框架”,里面有个选项叫“生成单个实例应用程序”,可能和你的要求有关。不过我已经用了上面的方法了,就没有再测试这个(我的Project就要完工了,我不想节外生枝),如果你测试了,不管什么结果,希望能告诉我,谢谢先