0

些細な問題のようです。

次のコード スニペットがあります。EnumerateFiles が実際に終了する前に、完了イベントが発生するようです。たとえば、tb_source.Text ... のようなパスがC:\users\<user>\desktop100 ほどのアイテムを含むフォルダーに設定されている場合、すべてが機能し、reference.throttler_numer_of_files正しく入力されます。

C:\users\<user>それを言うように設定すると、完了したイベントに進む前にすべてを見つける機会がないように見えます. ファイルをカウントしようとしたときに例外が発生した可能性がありますか?

提案?

// count number of files within source directory (and within subdirectories)
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;

bw.DoWork += new DoWorkEventHandler(
    delegate(object o, DoWorkEventArgs args)
    {
        Thread.Sleep(2000); // give the current UI a moment to load
        reference.throttler_number_of_files = Directory.EnumerateFiles(tb_source.Text, "*.*", SearchOption.AllDirectories).Count();
    }
);

bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
    delegate(object o, RunWorkerCompletedEventArgs args)
    {
        // success, clear to launch!
        form_throttler_copy throttler_copy = new form_throttler_copy();
        throttler_copy.Show();
        this.Dispose();
    }
);

label_status.Text = "Creating manifest of files... please wait";
picturebox_loading.Visible = true;

bw.RunWorkerAsync();
4

1 に答える 1

0

問題は、EnumerateFiles 中に例外 (アクセスが拒否されました) エラーが発生したことでした。例外をキャッチすることはできますが、次のファイル/ディレクトリに移動して、列挙を続行できる適切な方法を決定する必要があります。

編集 - 今後の参考のために、上記の方法の詳細は次のとおりです: Directory.EnumerateFiles => UnauthorizedAccessException

于 2013-07-17T21:10:12.423 に答える