SeToY Geschrieben 18. Oktober 2010 Geschrieben 18. Oktober 2010 Hallo, ich habe derzeit das Problem, dass bei Rechenintensiven Aufgaben die Oberfläche nicht mehr erreichbar ist. Simples "Keine Rückmeldung" im Taskmanager, aber das Programm an sich läuft noch. Hat jemand einen Tipp, oder einen guten Guide für einen Background-Worker, mit dem das ganze realisierbar zu seien scheint? Danke und Gruß SeToY Zitieren
Klotzkopp Geschrieben 18. Oktober 2010 Geschrieben 18. Oktober 2010 In unserer Tutorial-Linkliste gibt es ein Threading-Tutorial. Da drin findest du auch ein Kapitel über BackgroundWorker. Zitieren
SeToY Geschrieben 18. Oktober 2010 Autor Geschrieben 18. Oktober 2010 Danke dir, ich habe jedoch noch ein Problem Ich rufe meinen Worker folgendermaßen auf: private void btnExport_Click(object sender, EventArgs e) { if (cbServerName.Text != string.Empty && cbDatabase.Text != string.Empty) { backgroundWorker1.RunWorkerAsync(); } else { MessageBox.Show("No Server or Database set!"); } } So weit so gut... Nun sieht meine DoWork-Methode so aus: //tbDirectory.Enabled = false; //directoryPath = tbDirectory.Text + "\\"; SqlConnectionStringBuilder stringBuilder = new SqlConnectionStringBuilder(); stringBuilder.DataSource = cbServerName.Text; stringBuilder.InitialCatalog = cbDatabase.Text; stringBuilder.UserID = tbUsername.Text; stringBuilder.Password = tbPassword.Text; [......] Wenn ich nun in meine DoWork-Methode debugge, sehe ich, dass der BackgroundWorker nach dem initialisieren des StringBuilders direkt wieder in die "RunWorkerCompleted"-Methode springt... Obwohl die DoWork-Methode noch viel viel länger ist... Er macht einfach nicht alles, was in der Methode steht. Lieben Gruß SeToY Zitieren
Klotzkopp Geschrieben 18. Oktober 2010 Geschrieben 18. Oktober 2010 Dann schau mal nach der Doku zu RunWorkerCompleted, da steht, wie du feststellen kannst, was passiert ist. Zitieren
Rekon1602 Geschrieben 18. Oktober 2010 Geschrieben 18. Oktober 2010 Bin mir grad ned wirklich sicher, aber kann des daran scheitern, dass du versuchst mit dem Backgroundworker auf Controls zuzugreifen??? Du holst dir ja zum Beispiel mit stringBuilder.DataSource = cbServerName.Text; den aktuellen Text einer ComboBox nehm ich etz mal an. Und ich glaub mit sowas hat ein Backgroundworker probleme. Besser wäre es wenn du ihm die Werte der Textboxen und ComboBoxen direkt mitgibst. Ich hab lange nichts mehr mit Backgroundworkern gemacht, darum bin ich mir nicht ganz sicher... (nur zur info) Zitieren
HJST1979 Geschrieben 19. Oktober 2010 Geschrieben 19. Oktober 2010 Hallo bin zwar nicht besonders gut in C#, aber ich denke dein Code müsste auf eine Exception laufen. Kannst ja mal mit Try Catch abfangen ! Man darf nämlich im DoWork nicht auf Elemente der Maske zugreifen. Ich löse diesen Umstand meißt so, dass ich die Werte der MaskenElemente vorher in eine lokale Variable speichere und auf diese kann man dann im DoWork- Zweig zugreifen. Viel Spass Hans-Jörg Zitieren
Gateway_man Geschrieben 19. Oktober 2010 Geschrieben 19. Oktober 2010 Wenn du innerhalb eines Backgroundworker Events auf Controls zugreifen willst, empfehle ich dir Delegates. Im Grunde ist ein Backgroundworker nur ein stark abstrahierter Thread. Zitieren
2K1.INC Geschrieben 19. Oktober 2010 Geschrieben 19. Oktober 2010 Kannst ja mal mit Try Catch abfangen ! Unter Debug->Exceptions kannst du einstellen bei welchen Exceptions VS stehen bleiben soll... einfach ein hacken bei Thrown rein. Somit kannst du dir das try catch sparen beim debuggen... Zitieren
SeToY Geschrieben 19. Oktober 2010 Autor Geschrieben 19. Oktober 2010 Hallo, ja - habe jetzt auch gemerkt, dass ich nicht auf die Controls des GUI zugreifen kann. Habe diese nun in variablen initialisiert, mit welchen ich im Worker arbeite. @2k: Danke, habe ich auch noch nicht gesehen Vielen Dank noch mal an alle, mein Programm steht und läuft... und läuft und läuft Zitieren
HJST1979 Geschrieben 20. Oktober 2010 Geschrieben 20. Oktober 2010 Hallo freut mich wenn ich helfen konnte. Viel Spass noch beim programmieren ;-) Gruß Hans-Jörg Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.