"Недопустимая операция в нескольких потоках" как исправить данный недуг? - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д