Я получил эту ошибку при попытке обновления изображения. Это было кросс-потоковое обновление, но я использовал .Invoke(), так что это не должно быть проблемой, если оно.
"System.InvalidOperationException: объект в настоящее время используется в другом месте" - как мне это решить?
Ответ 1
(Отвечая на мой собственный вопрос, для других и для будущей справки)
Я думаю (еще не совсем уверен), что это потому, что InvokeRequired всегда будет возвращать false, если элемент управления еще не загружен/показан. Я сделал обходное решение, которое, похоже, работает на данный момент, что является простой ссылкой на дескриптор связанного элемента управления в его создателе, например:
var x = this.Handle;
(см. http://ikriv.com:8765/en/prog/info/dotnet/MysteriousHang.html - down? кешированная версия)
(Смежный вопрос: замена кода котельной - есть ли что-нибудь плохое об этом коде?)
Ответ 2
Если дескриптор еще не существует, вы можете заставить его путем подкласса элемента управления и вызова CreateHandle
; тем не менее, главный вопрос: почему вы делаете вещи с той формой, которая не была загружена? Лично я только начал такую операцию после загрузки.