HomeBlogMagic

C# Autostart nach initialisierter GUI

Die meisten Anwendungen in C# sind User Anwendungen die darauf warten dass ein User klickt oder andere Events auslöst.

Manchmal benötigt man eine Applikation die Eigenständig loslegen soll und die GUI nur zur Ausgabe benutzt.
Das komplizierte daran ist, dass man nicht einfach im Konstructor die Funktionen aufrufen kann, denn dann würde man die GUI anhalten, bzw, sie würde nie erscheinen.

Um das trotzdem zu schaffen, starte ich immer einen Timer, welche meine Funktionen verzögert aufruft und so die GUI nicht blockiert.

Das kann so implementiert werden:

public partial class SampleApp : Form
{            
  private System.Timers.Timer m_oTimer =  null; //!< Timer for delayed start 

  public SampleApp()
  {
    InitializeComponent();

    m_oTimer = new System.Timers.Timer();
    m_oTimer.Elapsed += Event_DelayedStart;
    m_oTimer.Interval=100; // Delay 100ms before autostart
    m_oTimer.Enabled=true;
  }

  void Event_DelayedStart(object oSource, System.Timers.ElapsedEventArgs oEventArgs)
  {
    m_oTimer.Enabled=false;
    // Begin auto started method here
    // ...
  }
}

Es ist unbedingt zu beachten dass Event_DelayedStart in einem anderen Thread läuft. Um wieder in die GUI zu kommen, muss mit Invoke gearbeitet werden.

Hier ein kleines Beispiel bei dem eine Funktion aufgerufen wird, welche die Gui verändern kann

BeginInvoke((MethodInvoker) delegate() { ChangeGuiItems(); });
Permalink: https://adirmeier.de/Blog/ID_196
Tags: Blog, Autostart, C#, GUIvon am 2018-05-08