マージするために最低 2 つのファイルを指定する必要があるリストボックスがあります。[マージ] ボタンをクリックするとマージが完了します。プログレス バーが起動し、ファイルがマージされたことを示すメッセージ ボックスが表示されます。バックグラウンド ワーカーを使用してプログレス バーを実行しています。
問題は、マージが 2 つのファイルで完了したときに、もう 1 つのファイルを追加し、マージ ボタンをクリックして、マージが完了したというメッセージが表示され、メッセージ ボックスで [OK] をクリックすると、メッセージ ボックスに、マージが行われたという同じメッセージが再び表示されることです。このメッセージ ボックスは、リスト ボックスにファイルを追加するたびに表示され続けます。
たとえば、2 つのファイルの場合、さらに 1 つのファイルを追加するとメッセージが 1ce den と表示され、2ice と表示され、リストボックスに 1 つ以上のファイルが表示され、3ic と表示されます。
デバッガーを使用して追跡したところ、リストボックスにファイルを追加するたびに、Background Worker Runcompleted イベントがその回数呼び出されることに気付きました。Merge ボタンの Click イベントのコードは次のとおりです...
Worker.DoWork += new DoWorkEventHandler(Worker_DoWork);
Worker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(Worker_RunWorkerCompleted);
Worker.WorkerSupportsCancellation = true;
if (!Worker.IsBusy)
Worker.RunWorkerAsync();
else
MessageBox.Show("Cannot run background worker twice ");
if (Worker.IsBusy)
{
progress = new ProgressDialogDTB();
progress.FormClosing +=
new FormClosingEventHandler(ProgressDialog_FormClosing);
progress.ShowDialog(this);
}
while (Worker.IsBusy)
{
Application.DoEvents();
}
//For Background Worker completed Event...
private void Worker_RunWorkerCompleted(object sender,
AsyncCompletedEventArgs e)
{
if (progress != null)
{
progress.Close();
progress = null;
}
if ( e.Cancelled )
MessageBox.Show(" Progress was cancelled ");
if (e.Error == null)
if (!e.Cancelled)
MessageBox.Show("Files has been merged ");
if (e.Error != null)
MessageBox.Show(e.Error.Message);
}//Worker_RunWorkerCompleted
どこが間違っているのかわかりません。助けてください...ありがとう...