Запустить приложение графического интерфейса VB.NET, используя Sub Main или объект запуска формы? - PullRequest
13 голосов
/ 22 ноября 2008

Есть ли причина для запуска программы с графическим интерфейсом (приложения для Windows), написанной на VB.NET в основной части модуля, а не непосредственно в форме?

РЕДАКТИРОВАТЬ: программа не будет принимать параметры командной строки, и она всегда будет выполняться как программа с графическим интерфейсом.

Ответы [ 4 ]

15 голосов
/ 22 ноября 2008

Основной причиной использования Main () в VB .NET 1.x было добавление кода, который должен был выполняться до загрузки любых форм. Например, вы можете определить, был ли уже загружен экземпляр вашего приложения Windows Forms. Или вы можете перехватить любое необработанное исключение для домена приложения:

AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf MyExceptionFilter

Но в следующей версии VB и Visual Studio 2005 появилась новая модель приложения , которая сделала Main () ненужным в большинстве сценариев. Теперь вы можете перехватить событие My.Application.Startup , чтобы добавить код, который необходимо выполнить перед загрузкой любых форм.

Обратите внимание, что код для обработчика события Startup хранится в файле ApplicationEvents.vb, который по умолчанию скрыт.

5 голосов
/ 22 ноября 2008

Вы можете сделать это в любом случае, но вы должны хранить код только в той форме, которая непосредственно связана с операциями и элементами пользовательского интерфейса в этой форме . Код запуска приложения не связан с пользовательским интерфейсом, обычно связан с заставками, проверкой сетевого подключения, проверкой только одного экземпляра, настройкой параметров конфигурации пользователя и т. Д.

После того, как вышеуказанные элементы (или соответствующий код инициализации для вашего приложения) завершены, Sub Main может создать экземпляр главной формы, а затем показать его, чтобы пользователь мог начать взаимодействовать с вашим приложением.

Это отделяет стартовый код от кода вашей формы. Позже, когда вы будете поддерживать приложение, вы будете рады, что разделили их.

2 голосов
/ 22 ноября 2008

Да, и я делал это несколько раз.

Одна из причин заключается в том, что если ваше приложение представляет собой 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

(из одной из моих попыток сделать заставку)

0 голосов
/ 22 ноября 2008

Нет, если вы всегда хотите показать эту форму.
Да, если вы иногда хотите использовать свое приложение без графического интерфейса, просто используйте командную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...