在vb 2008 express中,此选项在应用程序属性下可用。有谁知道它的功能是什么?这样做是为了不可能同时打开两个实例吗?
答案 0 :(得分:19)
这样做是为了不可能同时打开两个实例吗?
是
答案 1 :(得分:11)
是的,它makes it impossible同时打开两个实例。
然而,了解错误是非常重要。对于某些防火墙,甚至可以打开一个实例impossible - 您的应用程序在启动时崩溃了!有关详细信息,请参阅Bill McCarthy的this excellent article,以及将应用程序限制为一个实例的技术。他将命令行参数从第二个实例传递回第一个实例的技术使用.NET 3.5中的管道。
答案 2 :(得分:11)
为什么不使用Mutex?这就是MS的建议,我已经使用它多年,没有任何问题。
Public Class Form1
Private objMutex As System.Threading.Mutex
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'Check to prevent running twice
objMutex = New System.Threading.Mutex(False, "MyApplicationName")
If objMutex.WaitOne(0, False) = False Then
objMutex.Close()
objMutex = Nothing
MessageBox.Show("Another instance is already running!")
End
End If
'If you get to this point it's frist instance
End Sub
End Class
当表单在此情况下关闭时,互斥锁将被释放,您可以打开另一个互斥锁。即使你的应用程序崩溃,这也可以。
答案 3 :(得分:3)
Dim _process() As Process
_process = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)
If _process.Length > 1 Then
MsgBox("El programa ya está ejecutandose.", vbInformation)
End
End If
答案 4 :(得分:2)
是的,你是正确的,因为它只允许你的应用程序的一个实例一次打开。
答案 5 :(得分:1)
我找到了一篇关于这个主题的精彩文章:Single Instance Application in VB.NET。
使用示例:
Module ModMain
Private m_Handler As New SingleInstanceHandler()
' You should download codes for SingleInstaceHandler() class from:
' http://www.codeproject.com/Articles/3865/Single-Instance-Application-in-VB-NET
Private m_MainForm As Form
Public Sub Main(ByVal args() As String)
AddHandler m_Handler.StartUpEvent, AddressOf StartUp ' Add the StartUp callback
m_Handler.Run(args)
End Sub
Public Sub StartUp(ByVal sender As Object, ByVal event_args As StartUpEventArgs)
If event_args.NewInstance Then ' This is the first instance, create the main form and addd the child forms
m_MainForm = New Form()
Application.Run(m_MainForm)
Else ' This is coming from another instance
' Your codes and actions for next instances...
End If
End Sub
End Module
答案 6 :(得分:-3)
甚至有一种更简单的方法:
使用以下代码......
Imports System.IO
在主窗体加载事件上执行以下操作:
If File.Exist(Application.StartupPath & "\abc.txt") Then
'You can change the extension of the file to what ever you desire ex: dll, xyz etc.
MsgBox("Only one Instance of the application is allowed!!!")
Environment.Exit(0)
Else
File.Create(Application.StartupPath & "\abc.txt", 10, Fileoptions.DeleteonClose)
Endif
这将处理单个实例以及瘦客户端,并且在应用程序运行时无法删除该文件。关闭应用程序或者如果应用程序崩溃,文件将自行删除。