Как заставить мое приложение Windows Forms использовать пользовательскую основную функцию и получить доступ к Application Framework? - PullRequest
2 голосов
/ 30 апреля 2010

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

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

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

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

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

Спасибо.

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

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

Ответы [ 2 ]

1 голос
/ 30 апреля 2010

Вы должны иметь возможность делать то, что хотите, в Sub Main () с событием Startup. Проект + Свойства, вкладка «Приложение», прокрутите вниз, нажмите «Просмотр событий приложения». В верхнем левом поле выберите «(События моего приложения)». В правом верхнем углу выберите 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
1 голос
/ 30 апреля 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.

...