Due to multiple threads accessing the UI set variables, sometimes race conditions occur. Using semaphores cause deadlocks since the invokeRequired() method causes a thread switch which is then not allowed into the semaphore it was in before the invoke.