Hallo Knuddlbaer,
ich bin deinem Rat gefolgt und nun funktioniert ales wie gewohlt! Danke dir 😃
Der Code siet nun volgendermaßen aus:
private void Run() {
//- Hauptprogramm -------------------------------------------
//GatheringService vorbereiten
using (GatheringService gthService = GatheringService.GetInstance()) {
Application.Run(new MainForm());
}
}
private void LoadForm(object sender, EventArgs e) {
Settings settings = Settings.GetInstance();
//- Login ----------------------------------------------------
DialogResult loginResult = DialogResult.Abort;
//Login durchführen und anschließend die Daten laden
using (AuthService authService = AuthService.GetInstance()) {
if (!authService.InitializeDriver(settings.AuthDriver.Configuration))
throw new Exception(msgAuthDriverInitializationFailed);
LoginForm frmLogin = new LoginForm();
frmLogin.LoadMethod = new LoginForm.LoadingMethod(this.LoadApplicationData);
loginResult = frmLogin.ShowDialog();
}
if (loginResult == DialogResult.OK) {
//GatheringTreiber initialisieren
GatheringService gthService = GatheringService.GetInstance();
if (!gthService.InitializeDriver(settings.GatheringDriver.Configuration))
throw new Exception(msgGathDriverInitializationFailed);
this.BringToFront();
} else this.Close();
}
Danke dir Nochmals!
Hallo Knuddlbaer,
die Problematik mit dem ShowDialog ohne Run ist mir bewusst. Allerdings wird
soweit ich weis eine Message-Queue vom SchowDialog selbst erzeugt. Unschön
ist allerdings die Tatsache, dass ohne Application.Run() kein abschließendes
Cleanup vom Program durchgeführt wird, was der Fall währe, wenn der
Benutzer das Login abbricht. Zwar räumt das System hinter mir auf, aber unschön
ist es trotzdem. Daran grüble ich noch.
Deinen Vorschlag werde ich am Montag testen. Danke dir für deine Antwort 😃
Versuche mal folgendes:
...
Form1 form = new Form1(); //Hier die Variable der Klasse Form1 deklarieren, Form kennt label 1 nicht!!!
// Vor dem Run ausführen, sonst wird die Zeile erst nach dem Schlißen
//des Formulars ausgeführt (Run blockiert). Und label1 muss public sein
//(nicht schön, aber zum Testen lass es erstmal so.)
form.label1.Text = "";
Application.Run(form); //Hauptformular übergeben
...
Hallo Forumianer 😉
Ich bin neue hier und komme gleich mit einem Problem ins Haus getürmt, sorry.
Ich beiße mir bereits seit einiger Zeit die Zähne am folgenden Problem aus.
In einer .NETCF Anwendung werden zwei Fenster erzeugt. Das erstere dient als Splashscreen und als Anmeldeformular, das zweite ist das Hauptformular der Anwendung. Hierzu verwende ich folgenden Code:
private void Run() {
DialogResult loginResult = DialogResult.Abort;
//- Login ----------------------------------------------------
//Login durchführen und anschließend die Daten laden
using (AuthService authService = AuthService.GetInstance()) {
try {
if (!authService.InitializeDriver(settings.AuthDriver.Configuration))
throw new Exception(msgAuthDriverInitializationFailed);
LoginForm frmLogin = new LoginForm();
frmLogin.LoadMethod = new LoginForm.LoadingMethod(this.LoadApplicationData);
loginResult = frmLogin.ShowDialog();
} finally {
//Die vom Treiber beanspruchte Resourcen freigeben
authService.Dispose();
}
}
//- Hauptanwendung -------------------------------------------
if (loginResult == DialogResult.OK) {
//GatheringService initializieren
using (GatheringService gthService = GatheringService.GetInstance()) {
try {
if (!gthService.InitializeDriver(settings.GatheringDriver.Configuration))
throw new Exception(msgGathDriverInitializationFailed);
Application.Run(new MainForm());
} finally {
//Die vom Treiber beanspruchte Resourcen freigeben
gthService.Dispose();
}
}
}
}
Hierbei tritt aber ein merkwürdiges Verhalten auf:
Das Login-Formular wird geschlossen, aber das Hauptformular erscheint nicht.
Erst nach Betätigung der Alt+Tab Tastenkombination wird das Hauptformular angezeigt (scheinbar wird dieser im minimiertem Zustand erzeugt, obwohl WindowState = Maximized ist???). Auch der Versuch in dem Form.OnLoad-Event BringToFront() aufzurufen bzw. WindowState erneut auf Maximized zu setzen brachte keinen Erfolg.
Ist jemandem ein solches Verhalten bereits über den Weg gelaufen, oder kann jemand einen Gedankenfehler entdecken?
Ich danke euch allen im Voraus!
Viele Grüße
Builder
P.S.: Es handelt sich um ein Windows CE .NET 4.2 Device mit .NETCF 1.0.