We have an application which can export and import data to/from MS Project. Amount of data can be significant - 1000+ tasks.
But even with small data portions we noticed strange Project behavior - it can throw "app is busy" exception in your face when you do more than 1 operation in a row. E.g. create a new task, and read its finish date.
It can even throw this exception as a first operation after you just created Application object. Meaning:
var projectApp = new Application();
Applying STA to a thread task and using OleMessageFilter Register/Revoke found via google solved the problems! Thanks to Hans Passant for his comment which led me to this answer!