c#backgroundworker不能使用我想要的代码

我的代码在引人注目的时候没有出现任何错误我只是在试图运行它时得到一个。 它说ThreadStateException没有被我在多个地方搜索过的用户代码所取消,我的所有代码看起来都以同样的方式工作,我知道问题是什么。 这是不起作用的代码

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); } } } } 

任何帮助将不胜感激

您无法通过线程显示表单(对话框)。

  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) { string selectedpath = (string) e.Args; .... } 

另外,确保处理Completed事件并检查if (e.Error != null) ...
否则你会忽略错误。

在DoWork方法中添加一些exception处理。

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

 string 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 || !string.IsNullOrEmpty(ErrorMessage)) { //do something MessageBox.Show(ErrorMessage); } else { //do something else } }