6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
||||||
1 | ||||||
Backgroundworker ошибка23.05.2019, 16:45. Показов 2483. Ответов 20
Метки нет (Все метки)
Здравствуйте, решил по разбираться с потоками в winform, но получаю такую ошибку "System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан." В интернете как таковых примеров не нашел простых с использованием "backgroundworker". Как можно решить эту ошибку?
0
|
23.05.2019, 16:45 | |
Ответы с готовыми решениями:
20
BackgroundWorker и MainForm ошибка потока Сканирование адресов в backgroundworker. Ошибка "Сервер RPC недоступен" BackgroundWorker BackgroundWorker |
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
|
|
23.05.2019, 16:47 | 2 |
Обновлять Label при использовании BackgroundWorker нужно из события ProgressChanged.
Для обычного потока Thread придется городить Invoke. BackgroundWorker Class
1
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
24.05.2019, 18:40 [ТС] | 3 |
Спасибо за ссылку, очень помогла. На самом деле BackgroundWorker я использую в файловом менеджере при работе с левым и правым окнами. Когда открываю папку system32 в каком то окне, у меня зависает вся программа, до тех пор пока не заполнится listview. Так и должно быть? или надо использовать сам Thread?
0
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
||||||
25.05.2019, 13:21 [ТС] | 5 | |||||
Скорее всего так не получится. Метод в котором заполняю ListView, без него не получится, так как "lvl = lv.Items.Add(dirname, 9);" - добавляю строку, а "lvl.SubItems.Add(File.GetCreationTime(item).ToString());" - вставляет данные. Я создавал динамический ListView, что бы заполнить ним после окончания этого метода так сказать физический лист, но получал ошибку и-за того что данные типа используются в двух листах. Как вы говорили "данные считывайте в потоке, но заполняйте ListView только по получении уже всех данных, т.е. по завершении." я не знаю как это сделать.
0
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
25.05.2019, 13:43 [ТС] | 7 |
Да, считывание происходит моментально. Не совсем вас понял, данные я собрал в массивы допустим, мне потом этими данными нужно заполнить ListView. В любом случаи произойдем зависание формы, без разницы где я считываю эти данные в потоке или нет.
Где собрать данные? это не понял
0
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
25.05.2019, 14:15 [ТС] | 8 |
Такое у меня происходит даже в этой программе, которую делал по примеру. Когда запуская поток кнопкой1, я не могу нажать кнопку2, так как приложение зависает
0
|
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
|
|
25.05.2019, 14:28 | 9 |
0
|
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
|
|
25.05.2019, 14:45 | 10 |
1
|
25.05.2019, 15:39 | 11 |
Все новички, игнорирующие учебную литературу и впервые столкнувшиеся с потоками, повторяют одну и ту же ошибку:
Добавлено через 26 минут Yerta, Всё, что вызывается из очереди сообщений (клик по кнопке, например), должно выполняться мгновенно. Тогда окна не будут виснуть. Всё долгое, больше 1-10 мс, надо выносить в потоки различного вида.
3
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
25.05.2019, 17:32 [ТС] | 12 |
В виртуальном режиме можно добавить иконку файла в элемент?
0
|
25.05.2019, 17:47 | 13 |
0
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
25.05.2019, 17:56 [ТС] | 14 |
Rius, он быстрее работает, читал у вас на форуме и на других сайтах. Да и с ним меньше заморочек при добавлении строк
0
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
25.05.2019, 18:10 [ТС] | 16 |
Rius, освоил, проблема с зависание формы решена, но все равно должно заполняет мой ListView. Поэтому решил все переделать под Virtual Mode
0
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
||||||
26.05.2019, 17:14 [ТС] | 17 | |||||
Вопрос по поводу строки 19, если не использовать Invoke, то у меня происходит зависание 2-х ListView, не самой формы, можете сказать причину? ImageList у меня 2, для каждого ListView
0
|
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
|
|
26.05.2019, 17:43 | 18 |
Думаю начинать стоит с того, зачем вам там Invoke и почему не сделать по другому? Всегда можно написать так, чтобы никаких Invoke не требовалось... Например сделать отдельный список для иконок, а не сразу пихать их в ImageList... Можно даже список не делать, а сохранять иконку в тот же класс Data...
1
|
6 / 6 / 1
Регистрация: 12.10.2016
Сообщений: 141
|
|
26.05.2019, 21:40 [ТС] | 20 |
Invoke использовал для устранения ошибки, как то сразу не додумался это сделать списком, спасибо
0
|
26.05.2019, 21:40 | |
26.05.2019, 21:40 | |
Помогаю со студенческими работами здесь
20
BackgroundWorker BackgroundWorker BackgroundWorker и SaveFileDialog BackgroundWorker.RunWorkerCompleted Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |