Здравствуйте! Появилась следующая проблема, программа, в ходе работы создает множество потоков и обрабатывает поступающие данные в них, и когда появляется необходимость закрыть программу(до завершения обработки данных), потоки еще обработывают данные, и постоянно после закрытия программы, выходить сообщение "Прекращена работа программы", а когда потоки отрабатываю, сообщение закрывается, это хоть и не критично, но неприятно, в чем тут проблема, и как ее можно решить? Код | private void PingCompletedCallback(object sender, PingCompletedEventArgs e) { ((Semaphore)e.UserState).Release(); thread = new Thread(() => ScanData(e.Reply)) { IsBackground = true }; thread.Start(); }
|
Код | private void BackgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { stopwatch.Start();
for (var i = 0; i < iplist.Count; i++) { BackgroundWorker1.ReportProgress(i); Internet.PingAsync(iplist[i], PingCompletedCallback); }
stopwatch.Stop(); }
|
Код | private void Form1_FormClosing(object sender, FormClosingEventArgs e) { thread.Abort(); thread.Join(); }
|
Код | private void ScanData(PingReply reply) { //Много кода PrintAccountData(account[0], account[1]); }
|
Код | private void PrintAccountData(string username, string password) { // Много кода
if (TextResult.InvokeRequired) { Invoke(new Action(() => { //Берем список без последних 4 строк, чтобы вставить обновленный Footer TextResult.Lines = TextResult.Lines.Take(TextResult.Lines.Count() - 4).ToArray(); TextResult.Text += string.Format("\r\n|{0,4}|{1,18}|{2,18}|{3,6}|{4,26}|\r\n", count++, username, password, tariff[0], tariff[1]); PrintFooter(); })); } else { TextResult.Lines = TextResult.Lines.Take(TextResult.Lines.Count() - 4).ToArray(); TextResult.Text += string.Format("\r\n|{0,4}|{1,18}|{2,18}|{3,6}|{4,26}|\r\n", count++, username, password, tariff[0], tariff[1]); PrintFooter(); } }
|
|