Meiner Erfahrung nach ist es in 99% der Fälle unerwünscht, dass der Thread ein komplettes Event intern schon synchronisiert.
Wenn du das Event einfach nur ganz normal auslöst und dokumentierst, dass es im Kontext eines seperaten Threads aufgerufen wird, hat der Benutzer sehr viel mehr Möglichkeiten für spezifische Optimierungen. Wenn z.b. ClientSocket in einem Thread auf eingehende Daten wartet und dann ein Event zur Verarbeitung auslöst, ist in den meisten Fällen ja gar keine Synchronisierung mit dem Main-Thread erforderlich bzw. nur für ein kurzes
GUI Update nach der eigentlichen Verarbeitung.