【问题标题】:c# backgroundworker won't work with the code I want it to doc# backgroundworker 不能使用我想要的代码
【发布时间】:2011-02-04 14:46:21
【问题描述】:

我的代码在强制运行时不会出现错误,我只是在尝试运行它时得到一个。它说 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);
                }
           }

      }
 }

任何帮助将不胜感激

【问题讨论】:

    标签: c# button copy backgroundworker


    【解决方案1】:

    您不能在线程中显示表单(对话框)。

     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) ...
    否则你会忽略错误。

    【讨论】:

    • 你的代码刚刚在我的代码中出现了错误,我现在得到一个错误,说 dlg2 在当前上下文中不存在。
    • @bobthe,我的代码确实是一个草图。解决这些问题应该很容易。当然dlg2Dowork() 中不再可用。你混合了dlgdlg2,最好也检查一下。
    【解决方案2】:

    在您的 DoWork 方法中添加一些异常处理。

    看这里: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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多