AcManager.Controls.Dialogs.PromptCodeFromBrowser.Show C# (CSharp) Method

Show() private method

private Show ( [ url, Regex titleMatch, string description, string title, string watermark = null, string toolTip = null, bool multiline = false, bool passwordMode = false, int maxLength = -1, IEnumerable suggestions = null, Window window = null, CancellationToken cancellation = default(CancellationToken) ) : Task
url [
titleMatch System.Text.RegularExpressions.Regex
description string
title string
watermark string
toolTip string
multiline bool
passwordMode bool
maxLength int
suggestions IEnumerable
window System.Windows.Window
cancellation System.Threading.CancellationToken
return Task
        public static async Task<string> Show([Localizable(false)] string url, Regex titleMatch,
                string description, string title, string watermark = null, string toolTip = null,
                bool multiline = false, bool passwordMode = false, int maxLength = -1, IEnumerable<string> suggestions = null, Window window = null,
                CancellationToken cancellation = default(CancellationToken)) {
            if (window == null) {
                window = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive) ?? Application.Current.MainWindow;
            }

            WindowsHelper.ViewInBrowser(url);

            string code = null;
            var waiting = true;
            var ready = false;

            EventHandler handler = async (sender, args) => {
                if (!waiting) return;
                waiting = false;

                // ReSharper disable once AccessToModifiedClosure
                code = await Prompt.ShowAsync(title, description, code, watermark, toolTip, multiline, passwordMode, false, maxLength, suggestions, cancellation);
                ready = true;
            };

            window.Activated += handler;
            for (var i = 0; i < 500 && waiting; i++) {
                if (i > 0 && window.IsFocused) {
                    handler(null, null);
                    break;
                }

                if (code == null) {
                    code = GetOpenWindows()
                            .Select(x => titleMatch.Match(x.Value))
                            .FirstOrDefault(x => x.Success)?
                            .Groups.OfType<Group>().ElementAtOrDefault(1)?
                            .Value.Trim();
                }

                await Task.Delay(200, cancellation);
                if (cancellation.IsCancellationRequested) {
                    window.Activated -= handler;
                    return null;
                }
            }

            window.Activated -= handler;

            for (var i = 0; i < 500 && !waiting && !ready; i++) {
                await Task.Delay(200, cancellation);
                if (cancellation.IsCancellationRequested) return null;
            }

            return string.IsNullOrWhiteSpace(code) ? null : code.Trim();
        }
PromptCodeFromBrowser