我如何从一个私人空白处获取信息并将其放入另一个空白空间

时间:2011-02-04 15:33:37

标签: c# variables parameters methods

我想从一个私有空间获取信息,然后把它放到另一个我需要这样做,并且不能在同一部分中运行它们,因为我被告知不会使用我想要的代码。这里的代码是不能正常工作的dlg2.selectedPath,它可以从需要的按钮私有空间中识别出来。

    private void button1_Click(object sender, EventArgs e)
    {
       FolderBrowserDialog dlg2 = new FolderBrowserDialog();
        if (dlg2.ShowDialog() == DialogResult.OK)
        //do whatever with dlg.SelectedPath
        {
            backgroundWorker1.RunWorkerAsync();
        }
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {

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

        }

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以致电backgroundWorker1.RunWorkerAsync(dlg2.SelectedPath)。这会将字符串传递给worker。在DoWork处理程序中,您可以从DoWorkEventArgs实例中获取值:

string selectedPath = (string)e.Argument;
DirectoryInfo target = new DirectoryInfo(selectedPath);

答案 1 :(得分:1)

后台工作程序无法访问dlg2.SelectedPath因为它在另一个线程中工作。它位于UI线程中的dlg2,即backgroundWorker,位于另一个.net创建的线程中。您必须使用Control.Invoke和Control.InvokeRequired才能使其正常工作。

查看

Control Invoke