Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datengebundenen Tableadapter mit Task (neu)laden
SeriouslyNot
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

Datengebundenen Tableadapter mit Task (neu)laden

beantworten | zitieren | melden

Hallo,

ich versuche mich gerade in das Thema Tasks einzulesen. Ich versuche in einem Task ein Tableadapter zu laden und damit ein Chart Control zu befüllen.

public Task FillAsync()
        {
            return Task.Factory.StartNew(() =>
            {
                ( this.TableAdapter.Fill(this.DataSet.Test);

                // etc
            });
        }
        public async Task RebindUI()
        {
            await FillAsync();

            this.chart1.DataSource = this.DataSet.Test;
            chart1.Series[1].YValueMembers = "id";
            chart1.Series[1].XValueMember = "anzahl";
            chart1.DataBind();
            chart1.Update();
        }


Problem ist das der Chart im GUI nichts anzeigt. Wenn ich in Einzelschritten durch den Code gehe, wird der Chart korrekt angezeigt.
private Nachricht | Beiträge des Benutzers
Programmierhans
myCSharp.de - Experte

Avatar #avatar-1651.gif


Dabei seit:
Beiträge: 4318
Herkunft: Zentralschweiz

beantworten | zitieren | melden

DataBinding gehört in den UI-Thread
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
private Nachricht | Beiträge des Benutzers
SeriouslyNot
myCSharp.de - Member



Dabei seit:
Beiträge: 13

Themenstarter:

beantworten | zitieren | melden

Ok ich dachte, dass ich mich bereits wieder im UI Thread befinde... Nach dem anpassen kommt folgende Fehlermeldung:
Fehler
ExecuteReader erfordert eine geöffnete und verfügbare Connection. Der aktuelle Status der Verbindung ist 'Verbindung wird hergestellt'.

private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo SeriouslyNot,

aus [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke):
Zitat
Databinding: Zugriffe auf gebundene Daten

Nicht nur Zugriffe auf Controls selbst müssen aus dem GUI-Thread erfolgen. Auch alle Zugriffe auf andere Objekte/Daten müssen aus dem GUI-Thread erfolgen, nachdem diese mittels Databinding an Controls gebunden wurden. Das heißt, man kann durchaus eine aufwändige Liste in einem Worker-Thread füllen, aber sobald diese Liste an ein Control gebunden wurde, was natürlich im GUI-Thread erfolgen muss, müssen auch alle weiteren Zugriffe auf die Liste und/oder darin enthalte Objekte aus dem GUI-Thread erfolgen.

Beim Rebind befindest du dich (vermutlich) wieder im GUI-Thread, aber auch der Zugriff auf die gebundenen Daten muss im GUI-Thread erfolgen. Andersherum formuliert: Daten auf die man in einer (separaten) Task zugreifen will, dürfen noch nicht oder nicht mehr gebunden sein.

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1. Alle Fragen zum Thema Zugriff auf GUI-Elemente und gebundene Daten werden in der FAQ ausführlich behandelt.

herbivore
private Nachricht | Beiträge des Benutzers