【问题标题】:Where is the main function in VB.NetVB.Net的主要功能在哪里
【发布时间】:2011-08-31 14:55:43
【问题描述】:

我已经接管了对 VB.Net WinForms 应用程序的支持。我其实是一名 c# 开发人员,对 c# 项目中 Visual Studio 项目的设置比较熟悉。现在我正在尝试确定为什么我的应用程序在特定的 XP 安装中崩溃,我在这里阅读了建议

http://social.msdn.microsoft.com/forums/en-US/winformssetup/thread/53c2de93-ab33-41d0-b5dd-7ca5fbfa5c24/

在 main 函数中添加一个 try catch 块。这是从底部开始的第 5 个帖子中建议的。 (我将在下面引用它)但是,如果我查看 VB.Net Visual Studio 项目,我找不到 Main() 过程。我找到的是一个名为“我的项目”的灰色文件夹,里面有一个“Application.myapp”文件。此文件有一个关联的设计器文件,但如果我单击它,我会看到以下 xml:

<?xml version="1.0" encoding="utf-8"?>
<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <MySubMain>true</MySubMain>
  <MainForm>MDIMain</MainForm>
  <SingleInstance>false</SingleInstance>
  <ShutdownMode>0</ShutdownMode>
  <EnableVisualStyles>true</EnableVisualStyles>
  <AuthenticationMode>0</AuthenticationMode>
  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>
</MyApplicationData>

所以任何人都可以告诉我这个 VB.Net 项目的实际主过程调用在哪里,以便我可以尝试捕获正在发生的异常。如果我怀疑我的 VB.Net 项目中实际上没有 Main 过程,有人可以告诉我如何在我的项目中执行以下操作:

[STAThread]
static void Main()
{
    try
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
    catch (System.IO.FileNotFoundException ex)
    {
        MessageBox.Show(ex.Message + "    \n\n\n" + ex.StackTrace);
    }
}

【问题讨论】:

标签: c# .net vb.net


【解决方案1】:

VB 有一个特殊的模式叫做“应用程序框架”(可以在主选项下找到)。

如果启用此模式,编译器会自动生成Main 方法和一些围绕它的绒毛。您可以禁用此选项;但是,这可能会导致项目出现问题,因为项目实际上可能会使用应用程序框架功能。

或者,您可以使用相同的应用程序框架为未捕获的异常 (UnhandledExceptions) 注册事件处理程序。

【讨论】:

    【解决方案2】:

    更多的 VB 方法是打开应用程序属性并单击 ViewApplicationEvents 按钮。这将打开 Application.xaml.vb 文件,您可以在其中为应用程序添加自定义事件处理程序。从左侧下拉列表中选择Application Events,您可以轻松访问包括DispatcherUnhandledException,Activated,Navigating,Startup,Exit等在内的一堆事件。您也可以通过从左侧下拉列表中选择Applciation并选择来添加Main方法右侧下拉菜单中的主菜单。

    对于 WindowsForms 应用程序,过程类似。但是,当您选择 Applciation Events 按钮时,显示的文件是 ApplicationEvents.vb 文件。在这里,要添加全局错误处理程序,请选择左侧下拉菜单并选择 MyApplication Events。然后在右侧下拉列表中添加 UnhandledException 处理程序。您也可以在这里创建您的 Main 方法。

    【讨论】:

    • 虽然没有明确说明,但听起来 OP 正在使用 WinForms。因此,这篇文章不会有帮助(尽管它也没有错)。
    • 感谢您的信息,吉姆。我已经编辑了我的问题以明确声明我正在开发一个 WinForms 应用程序。我已按照您提供的步骤进行操作,并且在单击“应用程序事件”按钮时打开了 ApplicationEvents.vb。但是,问题是 ApplicationsEvents.vb 是完全空的;我只看到一个白屏,顶部的下拉菜单只显示“常规”和“声明”,但这两个下拉菜单也是空的。所以我看不到我必须在哪里选择应用程序事件。我使用的是 VS 2008,但是项目是从 VS 2005 升级而来的。
    • 在左侧下拉菜单中,您应该看到 General、MyApplication 和 MyApplication Events。选择事件,您应该会在右侧下拉菜单中看到可用事件列表。如果没有,在 MyApplication 部分类中,您可以创建一个具有以下签名的方法:“Private Sub MyApplication_UnhandledException(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException”来处理应用程序异常。
    【解决方案3】:

    【讨论】:

    • 并不是那么简单。 Main 方法仅在启用应用程序框架(默认情况下在 Forms 应用程序中)时自动生成。但如果禁用,您必须提供自己的入口点。
    【解决方案4】:

    我今天来到这个页面是为了寻找答案,我在这里和代码项目中都找到了一些好的答案。

    当我对自己知道该做什么感到满意时,我手头还有一种简化的方法,它几乎不影响项目属性。 (您必须关闭应用程序框架,否则 VB 运行时将不会运行 您的 Main 例程!)简而言之,如果您在定义启动表单的类模块中定义 Main 例程,Visual Basic 运行时引擎会找到并执行它。

    如上所述,您的例程必须定义为共享。您可以在 How to Run a Particular Form in VB.NET

    上查看我的示例以及其他一些说明

    警告

    当您禁用应用程序框架时,您会丢失单实例复选框。我刚刚完成了对引用示例的更新,以包含我为强制执行单个实例而开发和测试的代码。

    【讨论】:

    • Siride 评论说您可以在任何地方定义 Main,但您必须将其连接起来。我评论的重点是建议一种不需要任何自定义接线的方法。它只是工作。
    【解决方案5】:

    您可以在任何地方创建该方法,只要它是Shared。要连接它,您必须进入项目设置并将入口点设置为您的 Main 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多