VB.net 关于程序单实例问题的解决方法

就是在登陆窗体后台代码(或者说是程序的第一运行窗体后台代码)
-----------------------------coding-----------------------------------------------
        '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
-----------------------------coding-----------------------------------------------

然后在入口的   Form_Load   中合适的位置写入下代码 
-----------------------------coding-----------------------------------------------

                'For   single   instance
                Dim   pNimsID   As   Integer   =   CheckNimsRunning()
                If   (pNimsID   >   0)   Then
                        AppActivate(pNimsID)

                        Me.Close()
                        Exit   Sub
                End   If

-----------------------------coding-----------------------------------------------

 

 

 

关于单实例上面的代码有些小bug,就是在打开程序以后,继续狂点击程序开始的exe,会报错!

现把代码修改如下:

 Dim myProcesses As Process()
        Dim myfilename As String
        myfilename = Application.ExecutablePath
        myfilename = myfilename.Substring(myfilename.LastIndexOf("\") + 1)
        myfilename = myfilename.Substring(0, myfilename.LastIndexOf("."))
        myProcesses = Process.GetProcessesByName(myfilename)
        If myProcesses.Length > 1 Then
            MessageBox.Show("已经登陆", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Me.Close()
            Application.Exit()
        End If

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值