Visual Basic 中的 Main 过程

每个 Visual Basic 应用程序都必须包含一个名为 Main 的过程。 此过程用作应用程序的起点和总体控制。 .NET Framework 在加载应用程序并准备好将控制权传递给应用程序时,将调用 Main 过程。 除非要创建 Windows 窗体应用程序,否则必须为自行运行的应用程序编写 Main 过程。

Main 包含首先运行的代码。 在 Main 中,你可以确定在程序启动时首先加载哪个窗体,确定应用程序的副本是否已在系统上运行,为应用程序建立一组变量,或者打开应用程序所需的数据库。

主要过程的要求

单独运行的文件(通常具有扩展名 .exe)必须包含 Main 过程。 库(例如扩展名为 .dll 的库)不会自行运行,也不需要 Main 过程。 可以创建的不同类型的项目的要求如下:

  • 控制台应用程序自行运行,你必须至少提供一个 Main 过程。

  • Windows 窗体应用程序自行运行。 但是,Visual Basic 编译器会在此类应用程序中自动生成 Main 过程,你不需要编写一个。

  • 类库不需要 Main 过程。 其中包括 Windows 控件库和 Web 控件库。 Web 应用程序部署为类库。

声明主要过程

有四种方法可以声明 Main 过程。 它可以接受参数或不接受,也可以返回值或不返回。

注意

如果在类中声明 Main,则必须使用 Shared 关键字。 在模块中,Main 无需为 Shared

  • 最简单的方法是声明不采用参数或不返回值的 Sub 过程。

    Module mainModule
        Sub Main()
            MsgBox("The Main procedure is starting the application.")
            ' Insert call to appropriate starting place in your code.
            MsgBox("The application is terminating.")
        End Sub
    End Module
    
  • Main 还可以返回 Integer 值,操作系统将其用作程序的退出代码。 其他程序可以通过检查 Windows ERRORLEVEL 值来测试此代码。 若要返回退出代码,必须将声明 MainFunction 过程而不是 Sub 过程。

    Module mainModule
        Function Main() As Integer
            MsgBox("The Main procedure is starting the application.")
            Dim returnValue As Integer = 0
            ' Insert call to appropriate starting place in your code.
            ' On return, assign appropriate value to returnValue.
            ' 0 usually means successful completion.
            MsgBox("The application is terminating with error level " &
                 CStr(returnValue) & ".")
            Return returnValue
        End Function
    End Module
    
  • Main 还可以采用 String 数组作为参数。 数组中的每个字符串都包含一个用于调用程序的命令行参数。 可以根据它们的值执行不同的操作。

    Module mainModule
        Function Main(ByVal cmdArgs() As String) As Integer
            MsgBox("The Main procedure is starting the application.")
            Dim returnValue As Integer = 0
            ' See if there are any arguments.
            If cmdArgs.Length > 0 Then
                For argNum As Integer = 0 To UBound(cmdArgs, 1)
                    ' Insert code to examine cmdArgs(argNum) and take
                    ' appropriate action based on its value.
                Next
            End If
            ' Insert call to appropriate starting place in your code.
            ' On return, assign appropriate value to returnValue.
            ' 0 usually means successful completion.
            MsgBox("The application is terminating with error level " &
                 CStr(returnValue) & ".")
            Return returnValue
        End Function
    End Module
    
  • 可以声明 Main 以检查命令行参数,但不返回退出代码,如下所示。

    Module mainModule
        Sub Main(ByVal cmdArgs() As String)
            MsgBox("The Main procedure is starting the application.")
            Dim returnValue As Integer = 0
            ' See if there are any arguments.
            If cmdArgs.Length > 0 Then
                For argNum As Integer = 0 To UBound(cmdArgs, 1)
                    ' Insert code to examine cmdArgs(argNum) and take
                    ' appropriate action based on its value.
                Next
            End If
            ' Insert call to appropriate starting place in your code.
            MsgBox("The application is terminating.")
        End Sub
    End Module
    

另请参阅