Автор REAL DEAL задал вопрос в разделе Другие языки и технологии
C# чем отличается вызов эвента через Invoke и без? ! (объяснение с примером кода в пояснении к вопросу) и получил лучший ответ
Ответ от Scorpio[гуру]
Invoke выполняется в потоке GUI.
Scorpio
Просветленный
(24147)
Много GUI в разынх потоках это зло 🙂
Ответ от [новичек]
Если создать и запустить отдельный поток, параллельный основному потоку приложения (в котором обрабатываются события от GUI приложения) , то обратиться из него к GUI приложения (формам и контролам) - не получится. К ним в Winforms возможно обратиться только из основного потока. Invoke выполняет заданный код именно в основном потоке.
Отдельный поток создают для того, чтобы не загружать основной поток действиями, не связанными с GUI (например копирование или скачивание файла) , и GUI не зависал.
Дело в том, что события (клик мышью по окну, нажатие клавиши в текстбоксе и т. д. ) обрабатываются последовательно в цикле, и если сейчас в основном потоке скажем копируется файл, то пока не скопируется, окно не будет откликаться на мышь и клавиатуру.
Если же файл копировать в отдельном потоке, который будет выполняться в отдельном ядре процессора, то обработке сообщений в главном потоке не будет ничего мешать.
Ну и пример.
cyberforum.ru/windows-forms/thread1075236.html
Если создать и запустить отдельный поток, параллельный основному потоку приложения (в котором обрабатываются события от GUI приложения) , то обратиться из него к GUI приложения (формам и контролам) - не получится. К ним в Winforms возможно обратиться только из основного потока. Invoke выполняет заданный код именно в основном потоке.
Отдельный поток создают для того, чтобы не загружать основной поток действиями, не связанными с GUI (например копирование или скачивание файла) , и GUI не зависал.
Дело в том, что события (клик мышью по окну, нажатие клавиши в текстбоксе и т. д. ) обрабатываются последовательно в цикле, и если сейчас в основном потоке скажем копируется файл, то пока не скопируется, окно не будет откликаться на мышь и клавиатуру.
Если же файл копировать в отдельном потоке, который будет выполняться в отдельном ядре процессора, то обработке сообщений в главном потоке не будет ничего мешать.
Ну и пример.
cyberforum.ru/windows-forms/thread1075236.html
Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: C# чем отличается вызов эвента через Invoke и без? ! (объяснение с примером кода в пояснении к вопросу)