Veröffentlicht 18. Oktober 201014 j 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
18. Oktober 201014 j In unserer Tutorial-Linkliste gibt es ein Threading-Tutorial. Da drin findest du auch ein Kapitel über BackgroundWorker.
18. Oktober 201014 j Autor 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
18. Oktober 201014 j Dann schau mal nach der Doku zu RunWorkerCompleted, da steht, wie du feststellen kannst, was passiert ist.
18. Oktober 201014 j 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)
19. Oktober 201014 j 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
19. Oktober 201014 j Wenn du innerhalb eines Backgroundworker Events auf Controls zugreifen willst, empfehle ich dir Delegates. Im Grunde ist ein Backgroundworker nur ein stark abstrahierter Thread.
19. Oktober 201014 j 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...
19. Oktober 201014 j Autor 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
20. Oktober 201014 j Hallo freut mich wenn ich helfen konnte. Viel Spass noch beim programmieren ;-) Gruß Hans-Jörg
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.