Я считаю, что здесь происходит то, что этот код запускается до того, как Form
когда-либо появится.
Когда в .Net создается Form
, он не сразу получает сходство для определенного потока. Только когда выполняются определенные операции, такие как показ или захват ручки, он приобретает сходство. До того, как это произойдет, InvokeRequired
будет трудно функционировать правильно.
В этом конкретном случае сходство не установлено и родительский элемент управления не существует, поэтому InvokeRequired
возвращает false, поскольку не может определить исходный поток.
Способ исправить это - установить сходство с вашим элементом управления, когда он создается в потоке пользовательского интерфейса. Лучший способ сделать это - просто запросить у элемента управления его свойство handle.
var notUsed = control.Handle;