Winforms вопрос многопоточности сценария - PullRequest
2 голосов
/ 25 марта 2009

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

1 Ответ

5 голосов
/ 25 марта 2009

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

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

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