Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 :)

  • Autor

Danke dir, ich habe jedoch noch ein Problem :P

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

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) :)

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

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...

  • 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 :)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.