Как заставить приложение Windows Forms использовать пользовательскую основную функцию и получить доступ к Application Framework?

Я пытаюсь использовать функцию Main() в классе для управления потоком программы в моем приложении vb .net Windows Forms. Я добавил компонент экрана-заставки и экран входа в систему, а также настроил основную форму sdi. Я установил форму запуска в качестве своей основной функции на странице приложения в конструкторе проектов, и все, кажется, работает нормально.

Однако я хотел бы использовать: Me.MinimumSplashScreenDisplayTime = 5000

чтобы убедиться, что экран-заставка виден, но не распознается системой, если я не отмечу флажок «Включить платформу приложения» в конструкторе проектов. Если я это сделаю, при запуске программа проигнорирует экраны входа и заставки, а также все мои настройки и просто отобразит форму Form1 по умолчанию, хотя я также указал свой экран-заставку в раскрывающемся списке AF.

Конечно, есть альтернативные способы отложить заставку, например, временно перевести поток в спящий режим (что, похоже, не сработало), но я подозреваю, что в AF есть и другие вещи, которые я, возможно, захочу использовать.

Любые предложения о том, как я могу обойти это, пожалуйста, и получить разумные средства управления потоком программы? Любые мысли о наилучшей общей структуре для организации потока программы также будут полезны. Меня беспокоит как переход по Microsoft, так и альтернативный пользовательский маршрут, который может вызвать у меня проблемы позже, когда приложение станет более сложным.

Спасибо.

* Обновление *

Привет еще раз. Я попробовал оба ответа и включил этот ответ от Ханса Пассана в свой код и в конечном итоге разрешил все сообщения об ошибках. Однако это не решило проблему, так как мой экран-заставка не остается открытым в течение 5 секунд. Похоже, что к экрану-заставке MS и коду минимального времени отображения можно получить доступ только в том случае, если используется Application Framework, и я пытаюсь создать свой собственный запуск, так как я хочу начать с функции модуля/класса, а не форма. Любые (еще) идеи? Спасибо.


person user326775    schedule 30.04.2010    source источник


Ответы (2)


Вы должны иметь возможность делать то, что хотите, в Sub Main() с событием Startup. Project + Properties, вкладка Application, прокрутите вниз, нажмите View Application Events. В верхнем левом комбо выберите «(Мои события приложений)». Верхний правый комбо, выберите Startup.

Тем не менее, вы все равно можете получить фреймворк приложения и запустить его через Sub Main(). Добавьте модуль в свой проект и сделайте так, чтобы он выглядел так:

Imports Microsoft.VisualBasic.ApplicationServices

Module Module1
  Sub Main(ByVal args() As String)
    Dim app As New MyApp
    app.Run(args)
  End Sub
End Module

Class MyApp
  Inherits WindowsFormsApplicationBase
  Public Sub New()
    Me.SplashScreen = New SplashScreen1()
    Me.MinimumSplashScreenDisplayTime = 5000
  End Sub
  Protected Overrides Sub OnCreateMainForm()
    Me.MainForm = New Form1()
  End Sub
End Class
person Hans Passant    schedule 30.04.2010

Попробуй это:

Protected Overrides Function OnInitialize( _
    ByVal commandLineArgs As _
    System.Collections.ObjectModel.ReadOnlyCollection(Of String) _
) As Boolean
    ''# Set the display time to 5000 milliseconds (5 seconds). 
    Me.MinimumSplashScreenDisplayTime = 5000
    Return MyBase.OnInitialize(commandLineArgs)
End Function

Это было снято с сайта MSDN.

person Codex73    schedule 30.04.2010