"System.InvalidOperationException: объект в настоящее время используется в другом месте" - как мне это решить?

Я получил эту ошибку при попытке обновления изображения. Это было кросс-потоковое обновление, но я использовал .Invoke(), так что это не должно быть проблемой, если оно.

Ответ 1

(Отвечая на мой собственный вопрос, для других и для будущей справки)

Я думаю (еще не совсем уверен), что это потому, что InvokeRequired всегда будет возвращать false, если элемент управления еще не загружен/показан. Я сделал обходное решение, которое, похоже, работает на данный момент, что является простой ссылкой на дескриптор связанного элемента управления в его создателе, например:

var x = this.Handle; 

(см. http://ikriv.com:8765/en/prog/info/dotnet/MysteriousHang.html - down? кешированная версия)

(Смежный вопрос: замена кода котельной - есть ли что-нибудь плохое об этом коде?)

Ответ 2

Если дескриптор еще не существует, вы можете заставить его путем подкласса элемента управления и вызова CreateHandle; тем не менее, главный вопрос: почему вы делаете вещи с той формой, которая не была загружена? Лично я только начал такую ​​операцию после загрузки.