как мне взять информацию из одного частного пространства и поместить ее в другой - PullRequest
0 голосов
/ 04 февраля 2011

Я хочу взять информацию из одного закрытого пространства, а затем поместить ее в другой. Мне нужно это сделать, и я не могу запустить их в том же разделе, потому что мне сказали, что не будет работать с тем, что я хочу, чтобы код делал.Вот код, который не работает, это dlg2.selectedPath, экземпляр которого распознается из кнопки private void, где он должен быть.

    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 ]

3 голосов
/ 04 февраля 2011

Вы можете позвонить backgroundWorker1.RunWorkerAsync(dlg2.SelectedPath). Это передаст строку работнику. В вашем обработчике DoWork вы можете получить значение из экземпляра DoWorkEventArgs:

string selectedPath = (string)e.Argument;
DirectoryInfo target = new DirectoryInfo(selectedPath);
1 голос
/ 04 февраля 2011

Фоновый рабочий не может получить доступ к dlg2.SelectedPath, потому что он работает в другом потоке.dlg2 находится в потоке пользовательского интерфейса, backgroundWorker, в другом потоке, созданном .net.Вы должны использовать Control.Invoke и Control.InvokeRequired, чтобы заставить его работать.

SEE

Control Invoke

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...