Во-первых, см. Ответ Алекса.
Во-вторых, обратите внимание, что только то, что вы делаете что-то, что приводит к тому, что что-то заканчивается в насосе сообщений, что вызывает событие в потоке пользовательского интерфейса, не означает, чтоинициирующее действие должно было произойти в том же потоке.
Я говорю здесь очень широко;но учтите, что любой код может внутренне упорядочить вещи в потоке пользовательского интерфейса, вызвав Control.Invoke () или эквивалентный ему код.
В вашем собственном коде приложения, конечно, вы должны обязательно это сделать.Но я просто предполагаю, что если вы найдете где-нибудь код, который, кажется, нарушает этот принцип, то, вероятно, Invoke () где-то для вас.