thevo1d

Windows Form Function - Form kann nicht komplett geladen werden - Auslastung des Programmes - C-Sharp

Hallo Zusammen
Mein Problem ist wie folgt. Ich arbeite gerade an einem Tool welches eine SQL Datenbank auf Fehler überprüft, demnach sind es sehr viele Daten.
Nun habe ich eine Funktion" geschrieben welche viele der Zellen abgleicht, da dies eine Weile dauern kann wollte ich einen "Progressbar" in einer Form öffnen und diesen über die Funktion updaten. Als ich nun die form am Anfang der Funktion öffne lädt es im nur die leere mit 3 helleren weissen Streifen welche der Inhalt wären.
Daraufhin "freezed" das Programm dann auch, also nicht im Sinne von es Stürzt ab, sondern es ist einfach stark ausgelastet und deshalb kann man nichts mehr am Programm unternehmen. Nun habe ich verschiedenes versucht die Form im voraus anzeigen zu lassen. Ich habe es bereits mit: dem öffnen in einer anderen Form, einer "System.Threading.Thread.sleep" und mit einem async "await Task.Delay".
Gibt es eine andere Möglichkeit die Form im voraus zu öffnen? Und/Oder kann ich dieses Auslasten der Applikation irgendwie unterdrücken?

Vielen Dank im Voraus

TheVo1d

Codestücke/ Weitere Details:

if (frm.cbx_WService.Checked == true)
{
    tblFilter = frmFunc.ServicesCheck(tblFilter, lstTables[2], lstTables[1]);
}

Ich rufe die Funktion aus einer normalen if-Abfrage auf.

// Aufrufen der Form & zuweisen des Maximalen Wertes des Progressbars
frm_WorkInProgress frmWIP = new frm_WorkInProgress();
frmWIP.intMaximum = 10;

// Öffnen der Form
frmWIP.show();

// den Fortschritt erhöhen
frmWIP.intProgress++;

In der Funktion selber rufe ich die form auf und erhöhe den Fortschritt über eine Public int Variable welche ich erhöhe.

Meine bisherigen Versuche:


frm_WorkInProgress frmWIP = new frm_WorkInProgress();
frmWIP.intMaximum = 10;

frmWIP.show();

System.Threading.Thread.Sleep(5000);
Versuch 1: Temporäre Unterbindung des Ablaufs durch "Thread.Sleep"


// in der if Abfrage
this.Enabled = false;
wait();

// Als separate Funktion
public async void wait()
{
    await Task.Delay(5000);
    this.Enabled = true;
}
Versuch 2: Temporäre Unterbindung des Ablaufs durch "Async" - "Task.Delay"

// In einer anderen Form
if (frm.cbx_WService.Checked == true)
{
    frm_WorkInProgress frmWIP = new frm_WorkInProgress();
    frmWIP.Show();

    System.Threading.Thread.Sleep(5000);
    
    tblFilter = frmFunc.ServicesCheck(tblFilter, lstTables[2], lstTables[1]);
}
Versuch 3: Das öffnen & Warten in einer anderen Form
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 356497

Url: https://administrator.de/forum/windows-form-function-form-kann-nicht-komplett-geladen-werden-auslastung-des-programmes-c-sharp-356497.html

Ausgedruckt am: 16.06.2025 um 10:06 Uhr

Kraemer
Kraemer 29.11.2017 um 11:39:02 Uhr
Goto Top
SeaStorm
Lösung SeaStorm 29.11.2017 um 13:34:41 Uhr
Goto Top
Hi

dein Problem nennt sich MultiThreading. Dein Programm startet die Form in einem Thread. Die Form wiederum startet beim Laden sofort deine Funktion, die ne Weile irgendwelche Dinge macht. Bis dieses nicht durch ist, wartet die Form. Entsprechend aktualisiert die Form sich auch nicht.
Mit DoEvents() kannst du zwar "manuell" sagen, das die Form sich mal aktualisieren soll, aber das ist keine sonderlich tolle Lösung.

Du musst deine Funktion also in einen neuen Thread packen.

Gibt da verschiedene Varianten. Die üblichste bei C# ist wohl der Backgroundworker, der auch gleich eine Unterstützung für Progressbars usw mitbringt.
TheVo1d
TheVo1d 29.11.2017 um 13:44:41 Uhr
Goto Top
Vielen Dank!
Ich werde mich mal darüber informieren.
Ich melde mich erneut ob mir das ganze geholfen hat.
TheVo1d
TheVo1d 29.11.2017 um 16:46:42 Uhr
Goto Top
Besten Dank!
Ich glaube ich verstehe nun wo der Fehler liegt.
Ich blicke bei dem Multithreading zwar noch nicht ganz durch,
aber zumindest weiss ich nun wo ich Anfangen kann.

Vielen Dank

TheVo1d