在vb.net中使用运行实例执行命令行
我想使用我的应用程序的一个正在运行的实例(一个单实例应用程序)来运行一个新的命令行。。。 我听说过互斥锁和IPC机制,但我不知道如何使用它 说明:在vb.net中使用运行实例执行命令行,vb.net,command-line,single-instance,Vb.net,Command Line,Single Instance,我想使用我的应用程序的一个正在运行的实例(一个单实例应用程序)来运行一个新的命令行。。。 我听说过互斥锁和IPC机制,但我不知道如何使用它 说明: Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load MsgBox(Environment.CommandLine) End Sub End Class 示例: Public
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MsgBox(Environment.CommandLine)
End Sub
End Class
示例:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MsgBox(Environment.CommandLine)
End Sub
End Class
我用一个文件作为参数启动应用程序,它显示MsgBox,我让它运行。如果我再次启动以文件作为参数的应用程序,它将不会显示MsgBox。。。
如何使用新命令行显示它
尊敬的Drarig29。在VB.NET中,您可以从“项目属性”页面将应用程序设置为单个实例。选中“生成单实例应用程序”选项,然后单击“查看应用程序事件”按钮: 在
ApplicationEvents.vb
类中,为StartupNextInstance
添加一个处理程序-当应用程序已经运行并再次启动时,将调用该处理程序。您可以在主窗体上调用方法:
Namespace My
Partial Friend Class MyApplication
Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
' Handle arguments when app is already running
If e.CommandLine.Count > 0 Then
' Pass the argument to the main form
Dim form = TryCast(My.Application.MainForm, Form1)
form.LoadFile(e.CommandLine(0))
End If
End Sub
End Class
End Namespace
在主窗体中,您可以使用一个通用方法传递初始命令行参数,并处理后续参数:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
' Handle arguments from the initial launch
Dim args = Environment.GetCommandLineArgs()
If args.Length > 1 Then
LoadFile(args(1))
End If
End Sub
Public Sub LoadFile(filename As String)
MessageBox.Show(filename)
End Sub
End Class
谢谢你的回答,我稍后会试试这个。。。你能投我一票吗?我想赢得一些声誉。。。但只要你愿意!;)在接受答案之前,你应该先尝试一下,这样将来的读者就会知道这是否解决了你的问题。不必急于接受答案,如果答案没有帮助的话,您可能也不会记得以后再接受它。:-)但是我真的不知道这行是用来做什么的:
Dim form=TryCast(My.Application.MainForm,Form1)
。。。我试着不用这条线,它也能用。。。我用Form1
替换了form
,给出了这一行:Form1.LoadFile(e.CommandLine(0))
。您对此有何看法?我知道将对象与类文件相关联是很有用的,但是如果没有它,它真的有用吗?Form1
是类名,因此如果它是Shared
方法,您通常只会使用Form1.LoadFile
。然而。VB.NET()使用类名提供每个表单的默认实例,因为在旧版本的VB中它就是这样工作的。这对我来说总是有点老套,所以我从不使用它My.Application.MainForm
提供对主表单实例的引用,在本例中,它是一个Form1
实例。用你喜欢的任何一种方法——最后用同样的方法。