c # backgroundworker ne fonctionnera pas avec le code que je veux le faire

mon code n’engendre aucune erreur lorsque je suis convaincu que je viens d’en obtenir un en essayant de l’exécuter. il dit que ThreadStateException n’a pas été géré par le code utilisateur. J’ai cherché cela à plusieurs endroits et tout mon code semble fonctionner de la même manière. voici le code qui ne fonctionne pas

private void button1_Click(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { FolderBrowserDialog dlg2 = new FolderBrowserDialog(); if (dlg2.ShowDialog() == DialogResult.OK) //do whatever with dlg.SelectedPath { DirectoryInfo source = new DirectoryInfo(dlg.SelectedPath); DirectoryInfo target = new DirectoryInfo(dlg2.SelectedPath); DirectoryInfo dir = new DirectoryInfo(dlg.SelectedPath); FileInfo[] fis = dir.GetFiles("*", SearchOption.AllDirectories); foreach (FileInfo fi in fis) { if (fi.LastWriteTime.Date == DateTime.Today.Date) { File.Copy(fi.FullName, target.FullName +"\\"+ fi.Name, true); } } } } 

toute aide serait appréciée

Vous ne pouvez pas montrer un formulaire (boîte de dialog) à partir du fil.

  private void button1_Click(object sender, EventArgs e) { using (FolderBrowserDialog dlg2 = new FolderBrowserDialog()) { if (dlg2.ShowDialog() == DialogResult.OK) { backgroundWorker1.RunWorkerAsync(dlg2SelectedPath); } } } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { ssortingng selectedpath = (ssortingng) e.Args; .... } 

Assurez-vous également de gérer l’événement Completed et vérifiez if (e.Error != null) ...
Sinon, vous ignorerez les erreurs.

Ajoutez une gestion des exceptions dans votre méthode DoWork.

Regardez ici: http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/74d91404-9bc8-4f8f-8eab-4265afbcb101/

 ssortingng ErrorMessage = ""; void bgw_DoWork(object sender, DoWorkEventArgs ea) { //some variable declarations and initialization try { //do some odbc querying ErrorMessage = ""; } catch (Exception ex) { //stuff.. ErrorMessage = ex.Message; } } void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null || !ssortingng.IsNullOrEmpty(ErrorMessage)) { //do something MessageBox.Show(ErrorMessage); } else { //do something else } }