Map.Paint рисует N изображений. Необходимо отобразить прогресс этой операции. Во время каждой итерации в
Map.Paint создается событие. Вешаю на него обработчик, который вызывает
BW.ReportProgress() и получаю эксепшен:
System.Windows.Forms Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form1' не из того потока, в котором он был создан.
Если
BW.ReportProgress() вызывать прямо из
BW_DoWork(), то всё ОК. Как быть?
PS. Проблема почему-то только с
ToolStripProgressBar, а вот в
ToolStripStatusLabel текст спокойно ставится
private void BW_DoWork (object sender, DoWorkEventArgs e) {
string ImgSavePath = SavePath + "\\" + DB.TimeStart.ToString("yyyy-MM-dd HH-mm");
Mapper Map = new Mapper(TimeStart, TimeEnd);
Map.SaveImageEventHendler += new MapperEventHandler(OnSaveImageHandler);
Map.Paint(ImgSavePath);
}
private void OnSaveImageHandler (object sender, MapperEvent e) {
StatusBarMessage.Text = "Create map for " + e.Time.ToString("yyyy-MM-dd HH:mm");
BW.ReportProgress(e.QueueValue * e.QueueSize / 100);
}
private void BW_ProgressChanged (object sender, ProgressChangedEventArgs e) {
StatusBarProgress.Value = e.ProgressPercentage;
}