"Недопустимая операция в нескольких потоках" как исправить данный недуг? - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите пожалуйста исправить ошибку, вроде сделал с горем пополам вывод времени до конца операции распаковки архива, проверял в логах, все работало и выводило, начал выводить в лейбл - ошибка, по дефолту лейбл скрыт, раньше вывода данного текста перевожу visible в состояние true, при выводе текста в лейбл краш приложения:
Листинг программы
  1. An exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll but was not handled in user code
  2. Additional information: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'vremya_raspakovki_label' не из того потока, в котором он был создан.
Сам код:
Листинг программы
  1. public void zip_ExtractProgress(object sender, ExtractProgressEventArgs e)
  2. {
  3. var zip = ZipFile.Read("Update.zip");
  4. switch (e.EventType)
  5. {
  6. case ZipProgressEventType.Extracting_EntryBytesWritten:
  7. arhiv.Start();
  8. var uje = e.BytesTransferred;
  9. var vsego = e.TotalBytesToTransfer;
  10. var ostalos = vsego - uje;
  11. var skorost = uje / arhiv.Elapsed.TotalSeconds;
  12. var vremya = ostalos / skorost;
  13. TimeSpan vremya_convert = TimeSpan.FromSeconds(vremya);
  14. string time_vivod = string.Format("{0:D2} ч {1:D2} мин {2:D2} с",
  15. vremya_convert.Hours,
  16. vremya_convert.Minutes,
  17. vremya_convert.Seconds);
  18. vremya_raspakovki_label.Text = String.Format("Примерное время: {0}",
  19. time_vivod);
  20. break;
  21. case ZipProgressEventType.Extracting_AfterExtractEntry:
  22. if (context != null)
  23. context.Send((o) =>{
  24. double procenti = (((double)progressBar2.Value / (double)progressBar2.Maximum) * 100);
  25. label4.Text = String.Format(" Распаковка обновления... ({0}%)",
  26. procenti.ToString("0.0"));
  27. progressBar2.Value = e.EntriesExtracted;
  28. if(progressBar2.Value >= zip.Count) {
  29. button1.Enabled = true;
  30. button1.Visible = true;
  31. label4.Text = "Распаковка прошла успешно.";
  32. }
  33. },null);break;
  34. }
  35. zip.Dispose();
  36. }
Заранее благодарен за ответ или помощь, гуглил на эту тему, но решения не нашел...

Решение задачи: «"Недопустимая операция в нескольких потоках" как исправить данный недуг?»

textual
Листинг программы
  1. Console.WriteLine("{0}% {1}",
  2.                 procenti.ToString("0.0"),
  3.                 time_vivod);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы