Поскольку thread1 находится в контексте синхронизации, который будет обрабатывать опубликованное сообщение, вам необходимо публиковать сообщения, используя контекст синхронизации thread1. (Представьте себе контекст синхронизации как получателя сообщения.) Поэтому вам нужно каким-то образом передать контекст синхронизации thread1 в thread2. Один из способов - передать его в качестве параметра в thread2 с помощью делегата ParameterisedThreadStart:
private void Thread2Func(object obj)
{
SynchronizationContext parentThread = (SynchronizationContext)obj;
// ...
parentThread.Post(someCallback, someState);
}
и в теме1:
thread2 = new Thread(Thread2Func);
thread2.Start(SynchronizationContext.Current);