0

マージするために最低 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

どこが間違っているのかわかりません。助けてください...ありがとう...

4

2 に答える 2