是否有任何理由在模块的Sub Main中启动一个用VB.NET编写的GUI程序(Windows应用程序),而不是直接在表单中创建?使用Sub Main或表单启动对象启动VB.NET GUI应用程序?
编辑:该程序不会采取任何命令行参数,它将作为GUI程序始终执行。
是否有任何理由在模块的Sub Main中启动一个用VB.NET编写的GUI程序(Windows应用程序),而不是直接在表单中创建?使用Sub Main或表单启动对象启动VB.NET GUI应用程序?
编辑:该程序不会采取任何命令行参数,它将作为GUI程序始终执行。
在VB .NET 1.x中使用主要()的主要原因是用于添加代码需要在加载任何表单之前运行。例如,您可能想要检测您的Windows窗体应用程序的实例是否已经加载。或者您可能希望拦截任何未处理的异常的AppDomain中:
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyExceptionFilter
但VB的下一版本和Visual Studio 2005引入了一个新Application model是由main()的不必要在大多数情况下。您现在可以拦截My.Application.Startup event以添加需要在加载任何表单之前运行的代码。
请注意,Startup事件处理程序的代码存储在默认情况下隐藏的ApplicationEvents.vb文件中。
不,如果你总是想表现出这种形式。
是的,如果你有时想用你的应用程序没有GUI,只需使用命令行。
是的,我已经做了几次。
其中一个原因是,如果您的应用程序是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
(从我试图使一个屏幕保护程序中的一个)
你可以这样做,但你应该只保留与操作和用户界面元素直接相关的表单。应用程序启动代码与UI无关,通常与启动屏幕有关,检查网络连接性,仅验证单个实例,设置用户配置设置等等。
上述项目(或适用于您的应用程序的初始化代码)完成后,Sub Main可以创建主窗体的实例,然后显示它,以便用户可以开始与您的应用程序进行交互。
这将启动代码从表单代码中分离出来。之后,当您维护应用程序时,您会很高兴将这两者分开。
恕我直言,EXE需要以Sub Main()开头吗? – Arvo 2008-11-22 13:50:09