2009-03-25 3 views
2

Сегодня утром я увидел какой-то странный код от одного из моих коллег. В приложении winforms вся Mainform была указана в качестве ссылки. Он сделал это, чтобы вызвать методы из формы. Ничто не может взаимодействовать с пользовательским интерфейсом, просто используя методы расчета. Я уже уверен, что это не лучшая практика, но мне интересно. Если я вызову методы Mainform изнутри потока, эти методы все еще обрабатываются как многопоточность? Или они бегут внутри Mainform? Будет ли затронут поток пользовательского интерфейса при вызове методов из Mainfrom из потока?Сценарий сценария для многопоточности Winforms

+0

Я знаю! Я знаю! Разве я не был! – TalkingCode

ответ

5

Функции из формы, вызванной из другого потока, будут выполняться в потоке, который их вызывает, и не влияют на поток графического интерфейса. В качестве побочного эффекта это означает, что если вы вызываете функцию, которая взаимодействует с графическим интерфейсом, вы получите исключение.

Если вы хотите, чтобы их вызывали в потоке графического интерфейса пользователя, проще всего вызвать Control.Invoke(...), что заставляет делегат, который вы передаете, выполнять в потоке графического интерфейса, что позволяет взаимодействовать с графическим интерфейсом.

Смежные вопросы