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.
DataBinding gehört in den UI-Thread
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
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'.
🤔
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