"Недопустимая операция в нескольких потоках" как исправить данный недуг? - C#
Формулировка задачи:
Здравствуйте, помогите пожалуйста исправить ошибку, вроде сделал с горем пополам вывод времени до конца операции распаковки архива, проверял в логах, все работало и выводило, начал выводить в лейбл - ошибка, по дефолту лейбл скрыт, раньше вывода данного текста перевожу visible в состояние true, при выводе текста в лейбл краш приложения:
Сам код:
Заранее благодарен за ответ или помощь, гуглил на эту тему, но решения не нашел...
Листинг программы
- An exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll but was not handled in user code
- Additional information: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'vremya_raspakovki_label' не из того потока, в котором он был создан.
Листинг программы
- public void zip_ExtractProgress(object sender, ExtractProgressEventArgs e)
- {
- var zip = ZipFile.Read("Update.zip");
- switch (e.EventType)
- {
- case ZipProgressEventType.Extracting_EntryBytesWritten:
- arhiv.Start();
- var uje = e.BytesTransferred;
- var vsego = e.TotalBytesToTransfer;
- var ostalos = vsego - uje;
- var skorost = uje / arhiv.Elapsed.TotalSeconds;
- var vremya = ostalos / skorost;
- TimeSpan vremya_convert = TimeSpan.FromSeconds(vremya);
- string time_vivod = string.Format("{0:D2} ч {1:D2} мин {2:D2} с",
- vremya_convert.Hours,
- vremya_convert.Minutes,
- vremya_convert.Seconds);
- vremya_raspakovki_label.Text = String.Format("Примерное время: {0}",
- time_vivod);
- break;
- case ZipProgressEventType.Extracting_AfterExtractEntry:
- if (context != null)
- context.Send((o) =>{
- double procenti = (((double)progressBar2.Value / (double)progressBar2.Maximum) * 100);
- label4.Text = String.Format(" Распаковка обновления... ({0}%)",
- procenti.ToString("0.0"));
- progressBar2.Value = e.EntriesExtracted;
- if(progressBar2.Value >= zip.Count) {
- button1.Enabled = true;
- button1.Visible = true;
- label4.Text = "Распаковка прошла успешно.";
- }
- },null);break;
- }
- zip.Dispose();
- }
Решение задачи: «"Недопустимая операция в нескольких потоках" как исправить данный недуг?»
textual
Листинг программы
- Console.WriteLine("{0}% {1}",
- procenti.ToString("0.0"),
- time_vivod);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д