Podpinam sie pod temat bo mam taki mały problem.
Zamysł programu był taki aby zmieniać nazwy plików mp3 na takie jakie są wpisywane w tagach.
W programie mamy 2 listboxy. Na jednym mamy liste plików i ich nazw przed zmianą a na drugim po zmianie.
Chciałbym skorzystać z backgroundworkera aby w zależności od ilości elementów w folderze, elementy były wyświetlane dynamicznie. W chwili obecnej wszystko działa, jednak ładowanie elementów na liste powinno być w teorii dynamiczne wraz z pobieraniem kolejnego pliku z folderu jednak lista sie rozwija ale trzeba poczekać do zakończenia działania programu aby elementy na liście sie zapełniły. Dlatego chce użyć backgroundwork.
Mam kod:
private void button1_Click(object sender, EventArgs e)
{
folderBrowserDialog1.ShowDialog();
temp = this.folderBrowserDialog1.SelectedPath;
nazwy = Directory.GetFiles(@temp);
foreach (string s in nazwy)
{ i++; }
progressBar1.Maximum = i;
progressBar1.Value = 0;
foreach (string s in nazwy)
{
tytullistbox1 = s;
if (backgroundWorker1.WorkerSupportsCancellation == true)
{ backgroundWorker1.CancelAsync();}
backgroundWorker1.RunWorkerAsync();
...
}
To główna część kodu która znajduje sie pod buttonem.
Teraz co do backgroudworkera
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
if (worker.CancellationPending == true)
{
e.Cancel = true;
Application.Exit();
}
else
{
progressBar1.Value += 1;
listBox1.Items.Add(tytullistbox1);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
listBox1.Items.Add(tytullistbox1+"progresschanged");
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
}
else if (e.Error != null)
{
listBox1.Text = "Error: " + e.Error.Message;
}
else
{
listBox1.Text = "Done!";
}
}
I dostaje ciągle w miejscu:
backgroundWorker1.RunWorkerAsync();
Ten proces BackgroundWorker jest aktualnie zajęty, a nie można wykonywać wielu zadań jednocześnie.
Nie powinna
if (backgroundWorker1.WorkerSupportsCancellation == true)
{ backgroundWorker1.CancelAsync();}
zabijać te procesy?
Czy też ja źle korzystam z backgroundworkera?