Это зависит от типа объекта, в котором вы вызываете BeginInvoke.
ISynchronizeInvoke - это интерфейс, который определяет BeginInvoke. Он передает делегат объекту, который реализует этот интерфейс, и этот объект будет (должен) планировать выполнение потока в своем собственном главном потоке.
Есть несколько объектов, которые реализуют этот интерфейс. Диспетчер в WPF делает это - когда вы вызываете BeginInvoke для диспетчера, делегат добавляется в очередь диспетчера и запускается, когда это уместно.
Базовый класс Control в Windows Forms также реализует ISynchronizeInvoke (и я полагаю, что это может быть то, на что намекал ваш вопрос). В Windows Forms все намного сложнее. Вот отличная статья , объясняющая детали. По сути, при вызове BeginInvoke для элемента управления winforms происходит то, что специальный маршаллер создает сообщение Windows, которое передается программе, а поток пользовательского интерфейса ставит в очередь делегата для запуска. Это немного сложнее, чем это (как описано в этой статье), но это основная идея. Затем делегат запускается в основном потоке пользовательского интерфейса.
Существуют другие объекты, которые реализуют ISynchronizeInvoke, но большинство из них являются объектами, которые управляют и запускают свои собственные потоки. Эти объекты поддерживают очередь делегатов и добавляют свою в эту очередь, чтобы она выполнялась в их потоке.