Je souhaite exécuter un worker de fond pour mettre à jour une listbox avec des valeurs provenant d'une base de données mssql. Je suis sorti avec ceci:Mise à jour automatique C# listbox
public frmMain() {
InitializeComponent();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
}
private void frmMain_Load(object sender, EventArgs e) {
if (bw.IsBusy != true)
{
bw.RunWorkerAsync();
}
}
private void bw_DoWork(object sender, DoWorkEventArgs e){
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; (i <= 10); i++) {
if ((worker.CancellationPending == true)) {
e.Cancel = true;
break;
}
else {
(1) LoadPrescriptions(); //load the date in a list and writes the list into the listbox
(2) System.Threading.Thread.Sleep(500);
}
}
}
private void LoadPrescriptions()
{
main_controller = new MainController();
prescriptionsList = new List<Prescription>();
prescriptionsList = main_controller.LoadPrescriptions(0);
lstPrescriptions.Items.Clear();
for (int i = 0; i < prescriptionsList.Count; i++)
lstPrescriptions.Items.Add(prescriptionsList[i].name + " " + prescriptionsList[i].surname);
}
Quelque part entre (1) et (2) je reçois une erreur A first chance exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll
.
Des idées pour résoudre ce problème? Je veux juste lancer une mise à jour de la listbox aussi longtemps que le programme est en cours d'exécution.
Ne pas accéder à l'élément d'interface utilisateur graphique et débogage pour voir si vous obtenez toujours l'exception dans LoadPrescriptions – Adil
quoi? S'il vous plaît expliquer mieux parce que je n'ai pas compris. J'ai commenté le "pour" dans LoadPrescription mais j'ai toujours l'erreur. –
Je veux dire, avez-vous accès à certains contrôles Windows comme combo dans la méthode LoadPrescriptions? – Adil