Выполнение длительных операций в отдельном потоке с отображением этапов работы пользователю - C#
Формулировка задачи:
Например есть код:
Что я ожидаю: в листбоксе появляется цифра 1, далее идет подключение к фтп, там выполняются необходимые действия, по окончании в листбоксе появляется цифра 2.
Что я получаю: идет подключение к фтп, там выполняются необходимые действия, по окончании в листбоксе появляется цифра 1 и сразу же цифра 2.
Вместо работы с фтп, конечно, могут быть любые другие действия, выполнение которых требует время.
Как в данном случае поступают правильные программисты?
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Add("1");
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://127.0.0.1/123.txt");
request.Method = WebRequestMethods.Ftp.DeleteFile;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
listBox1.Items.Add("2");
}Решение задачи: «Выполнение длительных операций в отдельном потоке с отображением этапов работы пользователю»
textual
Листинг программы
BackgroundWorker bw = new System.ComponentModel.BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += (s, e)=>{for(int i=2; i<100;i++) { Thread.Sleep(500); (s as BackgroundWorker).ReportProgress(i);}};
bw.ProgressChanged += (ss, ee)=> label1.Invoke(new Action<int>(value=>label1.Value = value), ee.ProgressPercentage);