ビデオファイル(avi、mpegなど)を取得して別の形式に変換するアプリケーションを構築します。
私のアプリケーションにはファイルを追加するリストボックスがあり、ディレクトリを追加するオプションを追加したので、SafeFileEnumerator
クラスで(ここで見つけました)ディレクトリルートをチェックし、アクセス許可のあるフォルダーともちろんすべてのファイルのみを受け取り、追加したいよりもすべての関連ファイルをリスト ボックスに入れますが、mt GUI がフリーズするのを避けるためにスレッドを実行したいので、BackgroundWorker を使用しようとしています。ちゃんと:
private void btnAddDirettory_Click_1(object sender, EventArgs e)
{
string fileToAdd = string.Empty;
BackgroundWorker backgroundWorker = null;
DialogResult dialog = folderBrowserDialog1.ShowDialog();
if (dialog == DialogResult.OK)
{
btnAddfiles.Enabled = false;
btnAddDir.Enabled = false;
btnPlay.Enabled = false;
someClass myClass= new someClass ();
foreach (string fileName in SafeFileEnumerator.EnumerateFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories))
{
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork +=
(s1, e1) =>
{
if (myClass.iAviFormat(fileName))
{
if (myClass.isCorrectFormat(fileName))
{
backgroundWorker.ReportProgress(0, fileName);
//listBoxFiles.Items.Add(fileName);
}
else if (!myClass.isCorrectFormat(fileName))
{
fileToAdd = myClass.getNewFileName(fileName);
backgroundWorker.ReportProgress(0, fileToAdd);
}
}
};
}
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
(s1, e1) =>
{
btnPlay.Enabled = true;
btnClear.Enabled = true;
btnAddfiles.Enabled = true;
btnAddDir.Enabled = true;
});
backgroundWorker.ProgressChanged +=
(s1, arguments) =>
{
listBoxFiles.Items.Add(arguments.UserState);
};
backgroundWorker.RunWorkerAsync();
}
}