Нет ничего, что могло бы остановить обработчик событий в другом потоке, просто войти и прокрутить внутреннее состояние кнопки.
Однако, это вызывает плохие вещи - например, что произойдет, если вы изменили свойство элемента управления, когда что-то еще пыталось записать в него?
Одновременно только один поток должен связываться с внутренним состоянием объекта - если вы вызываете методы непосредственно для этого объекта из другого потока, вы не можете гарантировать, что что-то еще не делает то же самое.
Invoke обходит это, не вызывая его напрямую - вместо этого он говорит потоку, который «владеет» объектом «Эй, не могли бы вы вызвать этот метод для этого объекта, когда у вас есть момент?», Таким образом гарантируя, что Метод вызывается только тогда, когда объект находится в согласованном состоянии.