/// <summary>
        /// Adds the blank character.
        /// </summary>
        public static async Task AddBlankCharacterAsync(Action callback)
        {
            // Add blank character
            var result = await GlobalCharacterCollection.TryAddOrUpdateFromUriAsync(new Uri(s_filename));

            if (result == null || result.HasError)
            {
                return;
            }

            UriCharacter character = result.CreateCharacter();

            character.Monitored = true;

            callback.Invoke();
        }
        /// <summary>
        /// Try to download a character XML from the given URI.
        /// </summary>
        /// <param name="uri"></param>
        private async Task TryUri(string uri)
        {
            m_version++;
            m_args = null;

            // Update controls
            okButton.Enabled   = false;
            namePanel.Visible  = false;
            errorPanel.Visible = false;
            urlThrobber.State  = ThrobberState.Rotating;

            // Starts querying the web or the hard drive, and invokes the given callback on result
            int version = m_version;
            var result  = await GlobalCharacterCollection.TryAddOrUpdateFromUriAsync(new Uri(uri));

            if (version != m_version)
            {
                return;
            }

            urlThrobber.State = ThrobberState.Stopped;

            // Was there an error ?
            if (result.HasError)
            {
                okButton.Enabled   = false;
                errorPanel.Visible = true;
                labelError.Text    = result.Error;
                return;
            }

            nameTextBox.Text  = result.CharacterName;
            namePanel.Visible = true;
            okButton.Enabled  = true;
            m_args            = result;
        }