hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..

Доступ к контролу из другого потока?

Есть программа на winforms. По двойному клику на listview начинается проигрывание интернет радиостанции. Но так как при каждом клике форма подвисает на пару секунд, решил выполнять метод Play в другом потоке. Программа работает правильно, но если запустить программу под отладчиком, появляется исключение "InvalidOperationException".
5c7667a591ecc640744948.png
Метод Play принимает 2 параметра - строку с url потока и float громкость. Url беру с базы через метод GetUrlFromDB(в качестве параметра передаю название радиостанции из listview и получаю по названию сам url). Решил немного модифицировать код и при клике по listview, url передаю сначала в переменную tmp типа string, а в метод Play уже передаю url из переменной tmp. Студия перестала ругаться и все работает как надо. Можно ли так делать? Просто посмотрел примеры(MSDN, stackoverflow), так там нужно писать много кода, нужно создать несколько дополнительных методов и делегаты, что для меня в данный момент немного сложновато.

Рабочий код:
5c766a83836d3662658593.png
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
kwayne
@kwayne
Используйте метод invoke у lv.
lv.Invoke((MethodInvoker)delegate { lv.FocusedItem...; };
https://docs.microsoft.com/ru-ru/dotnet/api/system...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@John_Nash
coder
Решил немного модифицировать код и при клике по listview, url передаю сначала в переменную tmp типа string, а в метод Play уже передаю url из переменной tmp. Студия перестала ругаться и все работает как надо. Можно ли так делать?

для string можно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы