Programm im Tray-Bereich, bei Fehler Form öffnen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    Programm im Tray-Bereich, bei Fehler Form öffnen

    Mein aktuelles Projekt läuft im Hintergrund, nur ein Icon ist in der Taskleiste (neben der Uhr) sichtbar. Beim Starten des Programms wird eine Variable auf True geprüft, wenn diese Variable den Wert True hat, dann startet der Timer, der nach einer bestimmten Zeit die Synchronisierung startet. Wenn die Variable False ist, dann wird der Konfigurationsdialog geöffnet. Wie mach ich das nun mit Application.Run(), das das Programm bei True oder False einwandfrei läuft. Das Anwendungsframework habe ich deaktiviert, weil ich in jedem Projekt eine Startdatei Program.vb habe.
    Wo kommt denn der Wert dieser Variable her?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich erkläre kurz den Weg von der Program.vb bis zu dem Punkt wo die Application.Run aufgerufen werden soll.

    In der Sub Main, der Program.vb, wird eine Instanz von TrayApplication erstellt, anschließend wird die RunApplication, zu finden in der TrayApplication.vb, aufgerufen. In der TrayApplication gibt es eine Eigenschaft namens "IsConfigured", diese Eigenschaft bekommt den Wert durch prüfung bestimmter Einträge in der Registry, wenn ein Eintrag nicht existiert, dann hat die Eigenschaft den Wert False. In der RunApplication muss nun geprüft werden ob diese Eigenschaft den Wert True hat, dann startet der Timer, wenn diese den Wert False hat, dann wird die Konfigurationsdialog geöffnet
    Machs mal so:
    zuerst überprüfen ob alles da ist, wenn ja dann einfach den Einstellungsdialog überspringen und Application.Run() ausführen
    wenn nicht alles da ist: Einstellungsdialog per .Show() öffnen und Application.Run() bzw. Application.Run(Form) mit Application.ShutdownMode = ShutdownMode.OnExplicitShutdown
    dann kannst das Programm per Application.Exit() beenden.
    Willst Du so etwas wie einen Registry-Watcher bauen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Naja, er beendet die Anwendung einfach garnicht.
    Wenn du Application.Run(Form) machst aber davor noch den Thread startest, wird der Thread einfach weiterlaufen und nicht beim schließen der Form beendet werden.
    also:
    Programm initialisieren -> Thread starten -> Wenn False > Application.Run(Form) -> Wenn true > Application.Run()
    fürs beenden reicht dann ein Application.Exit()
    Ich hab mir das eigentlich so vorgestellt und würde diese Routine funktionieren.

    Programm initialisieren -> Variable abfragen -> False Form aufrufen -> True Programm läuft weiter.

    Am besten wär es wenn ich Application.Run ohne Parameter aufrufen kann, weil ich den Dialog nach meinem momentanten Programmaufbau nur über die ApplicationSession, die wird in TrayApplication initialisiert, aufrufen kann
    naja also...in Social Network.NET hab ich das so gelöst:

    VB.NET-Quellcode

    1. Public Class Procedures
    2. Private Shared program As New Program
    3. Shared Sub main()
    4. program.Main()
    5. End Sub

    VB.NET-Quellcode

    1. Sub Main()
    2. If Not StartInTray Then
    3. If MainWindow Is Nothing Then
    4. MainWindow = New MainWindow
    5. MainWindow.Show()
    6. Else
    7. If MainWindow IsNot Nothing Then
    8. If MainWindow.IsVisible Then
    9. MainWindow.BringIntoView()
    10. Else
    11. MainWindow = New MainWindow
    12. MainWindow.Show()
    13. End If
    14. End If
    15. End If
    16. End If
    17. Application.Current.Run()
    18. End Sub
    Ich werd es jetzt so lösen.

    RunApplication -> Eigenschaft "IsConfigured" prüfen -> Wenn True, Timer starten -> Wenn False, Einstellungsdialog öffnen -> DialogResult = OK -> RunApplication

    Nach der If-Abfrage von der Eigenschaft "IsConfigured" wird Application.Run ausgeführt
    du musst immer am Ende Application.Run() ausführen.
    Was du davor anzeigst etc. ist vollkommen egal.
    Also:
    starte deinen Timer etc. so wie du willst und wenn die Einstellungen nicht da sind, zeige den Einstellungsdialog.
    Beispiel:

    VB.NET-Quellcode

    1. Class YouProgram
    2. Sub Main()
    3. If Not "IsConfigured" Then
    4. If new SettingsDialog.Show() = DialogResult.Ok Then
    5. 'Irwas
    6. End If
    7. Else
    8. Timer.Start()
    9. End If
    10. Application.Run()
    11. End Sub
    12. 'Weiteres

    Und das rufste einfach auf.