2 Fensterklassen parallel arbeiten lassen

Hallo Zusammen,

ich entwickle ein Datenbankprogramm das im wesentlichen aus 2 Teilen besteht. Einmal Datenimport in die DB und einmal Berichterstellung aus der DB. Den Import übernimmt eine eigene Fensterklasse, die im Fenster nur eine ProgressBar hat um den Fortschritt anzuzeigen. Den Rest macht momentan noch meine Form1.
Wenn ich jetzt den Datenimport in die DB starte, kann ich das dahinterliegende Fenster nicht aktivieren, weil ja das Fenster mit der ProgressBar darüber liegt. Ich hätte aber gerne, dass beide Fenster parallel laufen und ich auch mit der Form1 arbeiten kann, während der Import läuft.

Meine ersten Versuche gingen dahin, einen Thread zu verwenden.
mein Code (zum Testen der Threads) sieht bisher so aus:
private: System::Void Form1_Load(System::open_mouth:bject * sender, System::EventArgs * e)
{
ThreadTest::testth* test = new ThreadTest::testth();
Thread* tmp = new Thread(new ThreadStart(test,&ThreadTest::testth::ThreadProc));
tmp->Start();
}

public: void ThreadProc()
{
this->Show();
for(int i = 0;iprogressBar1->Maximum;i+=5)
{
this->progressBar1->Value = i;
this->Reshape;
}
}

Dadurch konnte ich immerhin erreichen, dass beides in getrennten Threads läuft. Ich kann auch das darunterliegende Fenster aktivieren. Nur wenn ich in das Fenster mit der ProgressBar zurückwechsle, wird dieses nicht neu gezeichnet, sondern es schließt sich nach Beendigung der for-Schleife wieder. Mir wärs sehr recht, wenn man jederzeit in das Fenster klicken kann, um den Fortschritt am ProgressBar abzulesen!

Vielleicht hat ja jemand einen Tipp für mich!
Vielen Dank im voraus,

Matthias

Wenn ich dich richtig verstehe, willst du zwei Fenster in einem Programm erstellen, die du unabhängig voneinander benutzen kannst?

Ich hätte das Ganze auch mit Threads gemacht. Allerdings musst du darauf achten, dass beide Fenster nicht modal geöffnet werden. Wenn du die Fenster nämlich modal öffnest, kannst du das aufrufende Fenster nicht mehr fokussieren.

Achso, du hast nur INSGESAMT zwei Fenster? Dann musst du natürlich nur das aufgerufene Fenster modal öffnen.

Hier ein Link, der dir helfen könnte: http://openbook.galileocomputing.de/visual_csharp/vi…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ja genau, ich habe insgesamt nur zwei Fenster. Danke schon mal für deine Hilfe. Aber wie kann ich das modale Öffnen (ShowDialog) mit dem Thread „verwursten“? Ich hab da ein bisschen probiert aber das wird mir nicht ganz klar…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ja genau, ich habe insgesamt nur zwei Fenster. Danke schon mal
für deine Hilfe. Aber wie kann ich das modale Öffnen
(ShowDialog) mit dem Thread „verwursten“? Ich hab da ein
bisschen probiert aber das wird mir nicht ganz klar…

Du hast dein Hauptfenster offen, dann startest du einen Thread, welcher einen Dialog öffnet. Nun kannst du in diesem Dialog arbeiten, während in deinem Hauptfenster irgendwas rumgeladen wird.

Auf diese Weise startest du aus einem Programm (dein erstes Fenster) ein weiteres Programm (einen weiteren Dialog). Das heißt, du kannst beide Fenster unabhängig voneinander ansteuern. Das Hauptfenster im Hauptprogramm und das Dialogfenster im Quellcode deines Threads!

Hoffe, ich konnte dir weiterhelfen
Gruß
Woosh

Hallo Woosh,
sorry dass ich erst so spät antworte, aber ich arbeite nur montags und freitags.
Muss ich unbedingt das Fenster modal öffnen, sprich mit ShowDialog()? Weil so hab ich das Problem, dass wenn ichs so öffne, immer ein Fenster nicht angezeigt wird. Vermutlich liegts daran, dass ja ein DialogResult fehlt.
Das zweite Fenster soll nur zur Visualisierung des Einleseprozesses da sein. Es soll sich von selbst schließen wenn der ProgressBar voll ist und nich auf eine interaktion mit dem Benutzer warten.

Vielleicht hast du da noch ne Idee??
Vielen Dank schon mal!!!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Woosh,
sorry dass ich erst so spät antworte, aber ich arbeite nur
montags und freitags.
Muss ich unbedingt das Fenster modal öffnen, sprich mit
ShowDialog()? Weil so hab ich das Problem, dass wenn ichs so
öffne, immer ein Fenster nicht angezeigt wird. Vermutlich
liegts daran, dass ja ein DialogResult fehlt.
Das zweite Fenster soll nur zur Visualisierung des
Einleseprozesses da sein. Es soll sich von selbst schließen
wenn der ProgressBar voll ist und nich auf eine interaktion
mit dem Benutzer warten.

Vielleicht hast du da noch ne Idee??
Vielen Dank schon mal!!!

Du „musst“ das Fenster natürlich nicht modal öffnen. Modales Öffnen von Fenstern ist nur sinnvoll, wenn in dieser Zeit kein Zugriff auf das aufrufende Fenster gestattet sein soll.

In diesem Fall würde ich das Fenster nicht modal aufrufen. Dann würde das Ganze so aussehen:

Du hast ein Fenster und startest den Einleseprozess. Ein Fenster wird geöffnet und zeigt die ProgressBar an. So lange das Fenster lädt, kannst du natürlich im ursprünglichen Fenster weiterarbeiten.

Gruß
Woosh

Du „musst“ das Fenster natürlich nicht modal öffnen. Modales
Öffnen von Fenstern ist nur sinnvoll, wenn in dieser Zeit kein
Zugriff auf das aufrufende Fenster gestattet sein soll.

In diesem Fall würde ich das Fenster nicht modal aufrufen.
Dann würde das Ganze so aussehen:

Du hast ein Fenster und startest den Einleseprozess. Ein
Fenster wird geöffnet und zeigt die ProgressBar an. So lange
das Fenster lädt, kannst du natürlich im ursprünglichen
Fenster weiterarbeiten.

Gruß
Woosh

Das klappt auch schon. Nur hab ich folgendes Problem. Wenn der Einleseprozess meinetwegen 5000 Datensätze in die Datenbank schiebt, dauert das natürlich eine Weile. Ich kann in der Zwischenzeit im Hauptfenster weiterarbeiten. Nur wenn ich in das zweite Fenster zurückclicken will, wird das Fenster nicht neu gezeichnet, d.h. ich kann die Fortschritt des ProgressBars nicht sehen… Ich habs mit Refresh versucht, aber das klappt auch net!