private void getAnnoncesButton_Click(object sender, EventArgs e) { _nakabaParser = new NakabaParser(); SetEvents(); flowLayoutPanel1.Controls.Clear(); messageStatusLabel.Text = "Загрузка страницы..."; _pageLoader.LoadPage(_nakabaParser, urlTextBox.Text); AnnonceLoadState = AnnonceLoadStateEnum.Loading; }
private void SetEvents() { //Добавление объявления в контейнер FlowLayoutPanel Action <IAnnonceContent> addAnnonce = content => { flowLayoutPanel1.Controls.Add(new AnnoncePresenter(content)); AnnonceLoadState = AnnonceLoadStateEnum.Loading; }; //Отображение процесса загрузки в StatusBar Action <int, int> setProgress = (v, max) => { ProgressBar1.Maximum = _nakabaParser.TotalAnnonces; ProgressBar1.Value = _nakabaParser.AnnoncesParced; messageStatusLabel.Text = $"Страница {_pageLoader.CurrentPage} из {_pageLoader.TotalPages}. Загружено объявлений {v} из {max}"; }; //Изменение состояния загрузки Action <AnnonceLoadStateEnum, PageLoadedEventArgs> setState = (s, args) => { AnnonceLoadState = s; }; //Событие обработанного объявления. _nakabaParser.AnnonceParsed += (s, args) => { this.InvokeEx(addAnnonce, args.Content); this.InvokeEx(setProgress, args.Number, args.TotalAnnonces); }; //Событие изменение прогресса парсинга _nakabaParser.ParcingProgressChanged += (o, args) => { }; //Событие окончания парсинга _nakabaParser.ParsingEnded += (sender, args) => { this.InvokeEx(new Action(() => { AnnonceLoadState = AnnonceLoadStateEnum.Loaded; }), null); }; //Событие окончания загрузки страницы _pageLoader.PageLoaded += (sender, args) => { this.InvokeEx(setState, AnnonceLoadStateEnum.Loading, args); }; }
/// <summary> /// Устанавливает состояние элементов управления /// </summary> /// <param name="state">Состояние программы.</param> private void SetControlsState(AnnonceLoadStateEnum state) { getAnnoncesButton.Enabled = state == AnnonceLoadStateEnum.NotLoaded || state == AnnonceLoadStateEnum.Loaded; exportButton.Enabled = state == AnnonceLoadStateEnum.Loaded; statusStrip1.Visible = state == AnnonceLoadStateEnum.Loading; }