User 11061201 Ответов: 1

Альтернативный цикл сообщений с использованием application. run-события не запускаются


Привет сообщество, я столкнулся с большим количеством проблем, которые я не могу решить, когда я использую альтернативный насос сообщений, от событий, которые не запускаются, до полей, которые изменяются сами по себе, и классов, которые не создаются или не работают правильно.
Так как я не хочу использовать Windows.Форма и хочу, чтобы мое приложение работало более или менее аналогично как сервис, но не полностью. Я выбрал приложение Windows Forms и отключил Application Framework, я выбрал запуск из модуля. И поскольку моему приложению нужен насос сообщений, который я написал, чтобы он не закрывался сам по себе, а работал как форма Windows без окна. Я не знаю, в чем проблема, может быть, потоки конфликтуют, но опять же нет никакого исключения. Смотрите код:

Module Module1
Sub Main
         Dim absClass As New InheritorClass()
End Sub
End Module

Class AbstractClass
 Sub New()
        Me.Start()
 End Sub

   WithEvents MainTimer As New System.Timers.Timer
    Public Event Load()

    Private Sub Start()
        System.Console.WriteLine("Application has started.") 
        MainTimer.Interval = 5000
        MainTimer.Start()
          RaiseEvent Load()
        Application.Run()
          RaiseEvent Load()
    End Sub
    Sub Close()
        System.Console.WriteLine("Application will exit.")
        Application.Exit()
    End Sub
Dim retriesLeft As Integer = 10

    Private Sub MainTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles MainTimer.Elapsed 
        If retriesLeft > 0 Then
            System.Console.WriteLine(String.Format("{0} retries remaining...", retriesLeft))
            retriesLeft = retriesLeft - 1
        Else
            ' This stops the message pump, closing your application
            'Application.Exit()
            Me.Close()
        End If

    End Sub 
End Class

Class InheritorClass : Inherits AbstractClass
  Sub New()
   MyBase.New()
  End Sub

  Private Sub Me_Load() Handles Me.Load
   MsgBox("App has loaded") ' NEVER GETS TRIGGERED
  End Sub

End Class



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

Что я уже пробовал:

--------------------------------------------------------------------------------------

Richard MacCutchan

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

1 Ответов

Рейтинг:
1

Graeme_Grant

Тут немного Поисковые исследования Google[^], можно достичь того, чего вы хотите, но подход немного отличается. Прочтите об этом Поток StackOverflow[^Он должен иметь большинство, если не все ответы, которые вы ищете и будете искать.