Es ist BackgroundWorker
in DoWork
Kunstsammlung zu erstellen und ParallelForeach
Verarbeitung.Warum hört mein BackgroundWorker auf?
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
int cnt = (int) e.Argument;
List<int[]> ListArrays = new List<int[]>();
for (int i=0; i<cnt ; i++)
{
Random rnd = new Random((int)DateTime.Now.Ticks);
int length = rnd.Next(5000, 100000);
ListArrays.Add(new int[length]);
for (int j = 0; j < ListArrays[i].Length; j++)
{
ListArrays[i][j] = rnd.Next(0, 1000000);
}
}
int progress=0;
Parallel.ForEach(ListArrays, item =>
{
if (_backgroundWorker != null)
{
if (_backgroundWorker.WorkerReportsProgress)
{
_backgroundWorker.ReportProgress((int)(progress/(cnt/100M)));
}
if (_stopThread)
{
_busy.WaitOne();
}
if (_backgroundWorker.CancellationPending)
{
e.Cancel = true;
return;
}
Worker worker = new Worker();
worker.FindPrimes(item);
CounterPrimes += worker.CounterPrimes;
progress++;
}
});
}
Es gibt Schaltflächen "Stop", "Pause" und "Fortsetzen". Gleich nach dem Start funktioniert der Stop richtig. Aber wenn Sie eine "Pause" machen, dann fahren Sie fort, nachdem eine Stopp-Taste nicht funktioniert, warum?
AutoResetEvent _busy = new AutoResetEvent(false);
bool _stopThread;
private void StopBtn_OnClick(object sender, RoutedEventArgs e)
{
// _stopThread = false;
//_busy.Set();
_backgroundWorker.CancelAsync();
}
private void PauseBtn_OnClick(object sender, RoutedEventArgs e)
{
PauseBtn.IsEnabled = false;
_stopThread = true;
ResumeBtn.IsEnabled = true;
}
private void ResumeBtn_OnClick(object sender, RoutedEventArgs e)
{
ResumeBtn.IsEnabled = false;
PauseBtn.IsEnabled = true;
_stopThread = false;
_busy.Set();
}
_But wenn Sie eine Pause machen, dann weiterfahren, nachdem eine Stopp-Taste nicht funktioniert, warum? _ Sie sagten es selbst. STOP bedeutet STOP, danach gibt es keine Fortsetzung. Sie müssen es anhalten, um fortfahren zu können? – Mafii
@Mafii Frage bearbeiten, tut mir leid –
Ich bin überrascht, es gibt 'ru.stackoverflow'. Ist es für * Elite * (lol) Gruppe von russischen Programmierern? P.S .: Ich spreche Russisch, werde aber nie dorthin gehen, "ru.stackoverflow" ist wie "idontspeekenglishkkthxbai.stackoverflow". Englisch ist nützlich .. ich denke. – Sinatr