Ich habe eine Listbox, in der ich mindestens 2 Dateien zum Zusammenführen geben muss. die Verschmelzung erfolgt, wenn i button.The Fortschrittsbalken beginnen auf Zusammenführen klicken und das Meldungsfeld wird angezeigt, dass die Dateien haben merged.i Hintergrund Arbeiter sind mit dem Fortschrittsbalken laufen.BackgroundWorker gibt ein Problem in C# beim Hinzufügen eines Elements in Listbox?
Jetzt ist das Problem, wenn die Zusammenführung mit 2 Dateien erfolgt ist, ich füge eine weitere Datei hinzu, klicken Sie auf die Merge-Schaltfläche Merge ist fertig Nachricht erscheint, klicken Sie auf OK auf das Meldungsfeld, wieder erscheint das Meldungsfeld mit der gleichen Nachricht, die zusammenführen wurde durchgeführt. Dieses Meldungsfeld wird weiterhin angezeigt, wie oft ich die Datei in die Listbox einfüge.
Zum Beispiel für 2-Dateien erscheint Meldung 1ce den über das Hinzufügen von 1 weitere Datei Nachricht 2ice erscheint, 1 weitere Datei in listbox Meldung erscheint 3ic.Like dis es weiter ....
Wenn ich den Debugger verwendet verfolgt sie, ich bemerkte, dass mein Hintergrund Worker Runcompleted Fall, dass Anzahl, wie oft aufgerufen wird, wenn i-Datei im listbox.Here hinzuzufügen, ist der Code für Merge Schaltfläche Click-Ereignis ...
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
ich weiß nicht, wo Ich verhalte mich falsch. Bitte helfen Sie ... Danke ...
Können Sie den Code Arbeiter teilen? Was bedeutet Fertigstellung? Wenn es x mal aufgerufen wird, liegt es nahe, dass Ihr Worker es x-mal vollständig anzeigt, entweder weil es so funktioniert oder es x-mal instanziiert wird. – Lazarus
Viel Code, aber nichts davon ist relevant für das Problem. – Will
Keine Ahnung zu deinem Problem. Aber ich würde überdenken: while (Worker.IsBusy) {Application.DoEvents();} ebenfalls. Es ist CPU-Zeit essen! (oder war es nur zum Testen?) –