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(); });