[VB.NET]再问关于“生成单个应用程序实例”的问题

[VB.NET论坛] 专栏收录该内容
757 篇文章 2 订阅
VB.NET源码-156个实用实例哦…… <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
再问关于“生成单个应用程序实例”的问题
刚才在论坛中找了一下,发现有人提供如下代码:

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就要完工了,我不想节外生枝),如果你测试了,不管什么结果,希望能告诉我,谢谢先
__________________________________________________________________________
刚才又仔细看了一下你贴的代码,发现是 Sub Main,Sub Main是要放到模块里面并且设置为启动入口才行
__________________________________________________________________________
2005中有个选项选中即可。
__________________________________________________________________________
2003
http://faq.csdn.net/read/209901.html
__________________________________________________________________________
to sx_lxh:
你是说2005中工程属性中的只生成单个应用程序实例选项吧

这个当工程打开时需要访问网络,而且无法提示用户程序已经打开,并把窗体置为当前窗体!
__________________________________________________________________________
多谢sx_lxh了!
__________________________________________________________________________
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值