Как решается эта проблема - путем создания дополнительных действий, скажем, по таймеру, то есть часть действий из функции выносится в другую функцию, которая запускается по таймеру через время 0.0 , конечно, с этим тоже есть свои проблемы, но это вариант решения
А ExecuteFunc() не спасет? Она функции вроде в отдельном треде запускает...