Laden...

Datengebundenen Tableadapter mit Task (neu)laden

Erstellt von SeriouslyNot vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.742 Views
Thema geschlossen
S
SeriouslyNot Themenstarter:in
13 Beiträge seit 2013
vor 9 Jahren
Datengebundenen Tableadapter mit Task (neu)laden

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.

4.221 Beiträge seit 2005
vor 9 Jahren

DataBinding gehört in den UI-Thread

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

S
SeriouslyNot Themenstarter:in
13 Beiträge seit 2013
vor 9 Jahren

Ok ich dachte, dass ich mich bereits wieder im UI Thread befinde... Nach dem anpassen kommt folgende Fehlermeldung:

Fehlermeldung:
ExecuteReader erfordert eine geöffnete und verfügbare Connection. Der aktuelle Status der Verbindung ist 'Verbindung wird hergestellt'.

🤔

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo SeriouslyNot,

aus [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke/Dispatcher.Invoke):

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

Thema geschlossen