You can try setting the current directory in a separate thread, and wait for it to complete only for a reasonable period of time. Since the current directory setting is per process, calling SetCurrentDirectory from another thread would still do the job. You do have to consider, of course, what should happen if the set took longer than you were willing to wait, but after the main thread moved on the set has indeed completed.
Having that said, I try to avoid using a current directory for reasons other than opening a file selection dialog or so. Being process global, in a multithreaded environment it cannot be trusted. Using full paths are better when possible.