.NET вызов против произвольного контроля - PullRequest
1 голос
/ 10 марта 2011

У меня есть метод, который принимает элемент управления .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);)?

1 Ответ

0 голосов
/ 10 марта 2011

Этот вопрос для SO: Почему InvokeRequired предпочтительнее, чем WindowsFormsSynchronizationContext? предоставит вам возможный ответ, обсуждение и ответит на возможные проблемы, с которыми вы столкнетесь.

Что касается GuiThread.InvokeOnGuiThread(Blah); объясните, как он будет работать с несколькими потоками, имеющими рассылку сообщений и управляющими элементами управления окном (WindowsFormsSynchronizationContext решить эту проблему, создав поток в графическом интерфейсе и подключившись к текущему выполняющемуся потоку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...