/// <summary>
        /// </summary>
        private void CommandThreadEntry()
        {
            while (!CommandQueue.IsCompleted)
            {
                // Server name valid?
                if (Server == string.Empty)
                {
                    Thread.Sleep(1 * 1000);
                    continue;
                }

                // Connect to repro.
                if (Repository == null || !Repository.Connection.connectionEstablished())
                {
                    try
                    {
                        ServerInstance = new global::Perforce.P4.Server(new ServerAddress(Server));
                        Repository     = new Repository(ServerInstance);
                        Repository.Connection.UserName = Username;

                        Options options = new Options();
                        options["Password"] = Password;

                        Logger.Log(LogLevel.Info, LogCategory.Scm, "Connecting to perforce: {0}", Server);
                        Repository.Connection.Connect(options);

                        if (Repository.Connection.connectionEstablished())
                        {
                            Logger.Log(LogLevel.Info, LogCategory.Scm, "Connected to perforce server.");
                            UpdateClientName();
                        }
                    }
                    catch (P4Exception Ex)
                    {
                        Logger.Log(LogLevel.Error, LogCategory.Scm, "Failed to connect to perforce server with error: {0}", Ex.Message);
                        Thread.Sleep(5 * 1000);
                        continue;
                    }
                }

                // Execute next command.
                PerforceCommandHandler Handler = CommandQueue.Take();
                try
                {
                    Handler(Repository);
                }
                catch (Exception Ex)
                {
                    Logger.Log(LogLevel.Error, LogCategory.Scm, "Encountered exception while running perforce command: {0}", Ex.Message);
                }
            }
        }
        /// <summary>
        /// </summary>
        /// <param name="Callback"></param>
        public void QueueAndAwaitCommand(PerforceCommandHandler Callback)
        {
            ManualResetEvent Event = new ManualResetEvent(false);

            QueueCommand(
                Repo =>
            {
                try
                {
                    Callback(Repo);
                }
                catch (Exception Ex)
                {
                    Logger.Log(LogLevel.Error, LogCategory.Scm, "Encountered exception while running perforce command: {0}", Ex.Message);
                }
                finally
                {
                    Event.Set();
                }
            }
                );

            Event.WaitOne();
        }
 /// <summary>
 /// </summary>
 /// <param name="Callback"></param>
 public void QueueCommand(PerforceCommandHandler Callback)
 {
     CommandQueue.Add(Callback);
 }