Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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();
 }