Just write the addin.
Then anything else can communicate with that add-in using
So dim myaddin as addintype = swappable.GetAddinObject(Guid of your addin)
Now you have the live instance of your addin inside of solidworks.
Anything made public is accessible. Basically you can do whatever you want it to do.
No need to run solidworks in a separate .exe.
Since the solidworks objects are thread safe as i understand (because they are com objects ), you shouldn't have any issues with that.