我想从一个私有空间获取信息,然后把它放到另一个我需要这样做,并且不能在同一部分中运行它们,因为我被告知不会使用我想要的代码。这里的代码是不能正常工作的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);
}
}
}
任何帮助将不胜感激。
答案 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才能使其正常工作。
查看强>