【问题标题】:Start VB.NET GUI app using Sub Main or form startup object?使用 Sub Main 或表单启动对象启动 VB.NET GUI 应用程序?
【发布时间】:2010-09-23 14:31:12
【问题描述】:

是否有任何理由在模块的 Sub Main 中而不是直接在表单中启动用 VB.NET 编写的 GUI 程序(Windows 应用程序)?

编辑:该程序不会接受任何命令行参数,它将始终作为 GUI 程序执行。

【问题讨论】:

    标签: vb.net winforms


    【解决方案1】:

    在 VB .NET 1.x 中使用 Main() 的主要原因是添加在加载任何表单之前需要运行的代码。例如,您可能想要检测您的 Windows 窗体应用程序的实例是否已加载。或者您可能想要拦截 AppDomain 的任何未处理异常:

    AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyExceptionFilter
    

    但是下一版本的 VB 和 Visual Studio 2005 引入了一个新的Application model,这使得 Main() 在大多数情况下都是不必要的。您现在可以拦截 My.Application.Startup event 以添加需要在加载任何表单之前运行的代码。

    请注意,Startup 事件处理程序的代码存储在 ApplicationEvents.vb 文件中,默认情况下该文件是隐藏的。

    【讨论】:

      【解决方案2】:

      您可以采用任何一种方式,但您实际上应该只将代码保留在与操作和用户界面元素直接相关的表单中该表单上。应用程序启动代码与 UI 无关,通常与启动屏幕、检查网络连接、仅验证单个实例、设置用户配置设置等有关。

      完成上述项目(或您的应用程序的适当初始化代码)后,Sub Main 可以创建主窗体的一个实例,然后显示它以便用户可以开始与您的应用程序交互。

      这会将启动代码与您的表单代码分开。稍后,当您维护应用程序时,您会很高兴将两者分开。

      【讨论】:

        【解决方案3】:

        是的,我已经做过几次了。

        一个原因是,如果您的应用程序是 COM EXE(现在从 VB6 的角度讲),那么您希望能够检测在什么上下文中调用 EXE(正在启动或被其他人说话)应用程序)。

        例如:

        Sub Main()
            If App.StartMode = vbSModeAutomation Then
                ...
            Else
                ...
            End If
        End Sub
        

        另一个是如果您希望您的应用程序能够处理任何命令行参数。

        例如:

        Sub Main()
            If App.PrevInstance Then End
            If InStr(Command, "/s") > 0 Then
                Form1.Show
            ElseIf InStr(Command, "/p") > 0 Then
                LoadPicture ("c:\windows\Zapotec.bmp")
            End If
        End Sub
        

        (来自我制作屏幕保护程序的尝试之一)

        【讨论】:

        • 恕我直言,COM EXE 需要从 Sub Main() 开始吗?
        • 你是对的。我刚刚检查了当您选择在 VB6 中创建 ActiveX EXE 时会发生什么,它会创建一个类并将您放到那里填写它,而不是带您进入一个新表单。
        • 然而,COM EXE 可能是带有一两个表单的东西。可以有一个 EXE,它显示一个文本区域,该文本区域从各种不同的来源填充,但 COM 的方式。
        【解决方案4】:

        不,如果您总是想显示该表单。
        是的,如果您有时想在没有 GUI 的情况下使用您的应用程序,只需使用命令行即​​可。

        【讨论】:

          【解决方案5】:

          是的,如果我想根据某些参数(在文件中、在远程服务器上等)显示不同的表单。

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-19
          • 2014-05-06
          • 2015-01-08
          • 1970-01-01
          • 2014-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多