Das COM-Verhalten macht Sinn, wenn Sie darüber nachdenken. Der Code wird im Serviceprozess ausgeführt. Wenn Sie die Klasse für die Ausführung in Single Threaded Apartment markieren, wird jeweils nur ein Thread ausgeführt. Gleichzeitige Anrufe werden in der Nachricht qeueu gestapelt, die jeweils einzeln ausgeführt wird. Wenn ein Multithread-Apartment angegeben wird, kann der Code gleichzeitig ausgeführt werden. Um dies im laufenden Prozess zu erreichen, werden mehrere Threads zusammengesponnen, um dieses Verhalten zu erreichen.
Wenn Sie Nebenläufigkeitsprobleme vermeiden möchten, müssen Sie Ihre Klasse in eine DLL setzen. Dann haben Sie immer noch mehrere Threads, aber jeder wird im aufrufenden Prozess ausgeführt, so dass Sie sich keine Gedanken über den Status machen müssen.
Es gibt keine Möglichkeit, einen Codeblock gleichzeitig ohne Threads auszuführen. Selbst wenn Sie in separaten Prozessen ausführen, sind immer noch mehrere Threads involviert, sie sind nur durch die Prozessgrenze getrennt.
Ich bin nur belächelt die obvoouse Becayse Ich arbeitete einmal für eine Firma, die einfach nicht durch ihre Köpfe bekommen konnte. :-) Sie dachten, sie könnten Threading-Probleme vermeiden, indem sie in separaten Prozessen ausgeführt werden und Shared Memory (Memory Mapped Files) verwenden! Das funktionierte (irgendwie), als ihr Code auf einer einzelnen CPU lief und sie eine "Reparatur" -App hinzufügten, um die Widersprüche zu beheben. Bei der letzten Installation sind sie auf mehrere CPUs umgezogen und alles ist wirklich auseinander gefallen. Dann bin ich gegangen, das Ende.