Dire que j'ai la classe suivante/forme (semi-psuedo):problème travailleur de fond
public partial class X : Form
{
private DataTable dt;
private BackgroundWorker bg;
public X()
{
dt.Columns.Add("A");
dt.Columns.Add("B");
dt.Columns.Add("C");
}
private void button_Click(...)
{
bg = new BackgroundWorker();
bg.DoWork += new DoWorkEventHandler(bg_DoWork);
bg.RunWorkerAsync();
}
private void bg_DoWork(...)
{
// do some stuff
MagicMethod(parameters);
// doesnt work, how to fix this?
dataGridView1.Invoke((Action)delegate { dataGridView1.DataSource = dt; });
}
private void MagicMethod(params)
{
// update a label, WORKS
label1.Invoke((Action) delegate { label1.Text = "somestuff" }
// do some stuff to fill the datatable
}
}
Ofcourse c'est une version distillée, sans tout BackgroundWorker est son, mais comme je veux une interface plus réactive I essayer d'en mettre un en œuvre. Mais la grille n'est pas mise à jour par le travailleur (alors que l'étiquette le fait correctement). Des conseils?
Si vous pouviez fournir un exemple court mais * complet *, il serait plus facile de vous aider. –
Activer le débogage> Exceptions> Exceptions Common Language Runtime> Lancer et vérifier ce qui échoue. Le code que vous avez fourni fonctionne. – jmservera