/// <summary> /// Запуск фонового потока для обработки фотографий /// </summary> private void btnRun_Click(object sender, EventArgs e) { //Training //https://msdn.microsoft.com/en-us/windows7trainingcourse_win7taskbarmanaged_topic2#_Toc236828995 //http://rsdn.org/article/dotnet/CSThreading2.xml //http://qaru.site/questions/158908/how-to-use-a-backgroundworker //проверка состояния, остановить если работает //Check if background worker is doing anything and send a cancellation if it is if (bw != null) { if (bw.IsBusy) { bw.CancelAsync(); return; } } bw = new BackgroundWorker(); //Получение параметров varforbw varforbw1 = new varforbw(); varforbw1.pathImages = txtPathFolder.Text; varforbw1.pathFileGPS = txtPathGpsFile.Text; varforbw1.overwriteGPSInfo = checkReplaceGPS.Checked; varforbw1.addOrRemoveTime = radioBtnAddTime.Checked; varforbw1.addTime = new System.TimeSpan(Convert.ToInt32(numericHour.Value), Convert.ToInt32(numericMin.Value), 0); //Запуск фона bw.DoWork += bw_DoWork; bw.ProgressChanged += bw_ProgressChanged; bw.RunWorkerCompleted += bw_RunWorkerCompleted; bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; // prog.SetProgressState(Microsoft.WindowsAPICodePack.Taskbar.TaskbarProgressBarState.Normal); btnRun.Text = "Остановить"; // //cls richtbLog.Clear(); richtbLog.AppendText("====================" + "\n"); richtbLog.AppendText("Запуск процесса" + "\n"); richtbLog.AppendText(DateTime.Now.ToString() + "\n"); richtbLog.AppendText("====================" + "\n"); //Запуск фонового процесса bw.RunWorkerAsync(varforbw1); }
/// <summary> /// Фоновый поток /// </summary> static void bw_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker bw_local = sender as BackgroundWorker; varforbw varforbw1 = (varforbw)e.Argument; string appendText; // /*try * {*/ //Получение списка файлов List <string> filesjpg = Directory.GetFiles(varforbw1.pathImages, "*.jpg").ToList <string>(); //Проверка наличия файлов if (filesjpg.Count < 1) { throw new Exception("Нет файлов для обработки"); } //Фото сервис PhotoService ps = new PhotoService(); //Передача параметров работы ps.Params.addOrRemoveTime = varforbw1.addOrRemoveTime; ps.Params.addTime = varforbw1.addTime; // n ps.Params.overwriteGPSInfo = varforbw1.overwriteGPSInfo; // n ps.Params.pathFileGPS = varforbw1.pathFileGPS; //Парсинг файла GPS ps.ValidateFileGPS(); //Расчет одного процента для прогресса float one_percent; one_percent = filesjpg.Count / (float)100; int percent = 0; //обработка int i = 0; string rez; // appendText = "Получен список файлов. Всего: " + filesjpg.Count.ToString() + " файла"; bw_local.ReportProgress(percent, appendText); // var listPointsWithPhoto = new List <KeyValuePair <string, PointGPS> >(); PointGPS point_local; // foreach (var s in filesjpg) { appendText = "Обработка фотографии: " + new FileInfo(s).Name; bw_local.ReportProgress(percent, appendText); //Обработка фото point_local = null; rez = ps.WriteGPSinImage_PresentationCore(s, out point_local); if (rez == "ok") { listPointsWithPhoto.Add(new KeyValuePair <string, PointGPS>(s, point_local)); // appendText = "Фотография успешно обработана"; } else { appendText = rez; } //Процент выполнения i++; percent = Convert.ToInt32(i / one_percent); //Разделитель appendText = appendText + "\n--------------------"; //Прогресс Вывод результата bw_local.ReportProgress(percent, appendText); //Check if there is a request to cancel the process if (bw_local.CancellationPending) { e.Cancel = true; return; } } //Формирование файла KML по фотографиям //appendText = "\nФормирование файла KML по фотографиям"; //bw_local.ReportProgress(percent, appendText); // //ps.CreateKML(listPointsWithPhoto); // bw_local.ReportProgress(100); /*} * catch (Exception ex) * { * appendText = "ОШИБКА: "+ ex.Message; * bw_local.ReportProgress(100, appendText); * e.Cancel = true; * }*/ }
public PhotoService() { Params = new varforbw(); }