У меня есть метод, который принимает элемент управления .NET и вызывает против него, например, так:
Form.Invoke(Target);
Однако я неоднократно сталкивался с проблемой, вызывающей этот метод, где из-за синхронизации иликак бы то ни было, дескриптор формы на форме не существует, что вызывает ошибку Invoke or BeginInvoke cannot be called on a control until the window handle has been created
.В отчаянии я в шутку изменил код на:
MainForm.Invoke(Target);
, где MainForm
- главное окно приложения (дескриптор формы для главной формы создается при запуске и остается активным в течение всего жизненного цикла.приложения).Я запустил все тесты и вручную протестировал приложение, и все, кажется, работает нормально, несмотря на тот факт, что это используется везде.
Итак, мой вопрос, что именно означает вызов против определенного элемента управления?Есть ли минус в том, что вы всегда будете активны?Если нет, то почему .NET сначала вызывает против элемента управления (вместо простого создания статического GuiThread.InvokeOnGuiThread(Blah);
)?