在vb.net中使用运行实例执行命令行

在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

我想使用我的应用程序的一个正在运行的实例(一个单实例应用程序)来运行一个新的命令行。。。 我听说过互斥锁和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 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
实例。用你喜欢的任何一种方法——最后用同样的方法。