private Collection <Collection <string> > CreateBaseResult()
        {
            List <Control> list;

            if (_processId != null)
            {
                var app = ApplicationFactory.AttachToProcess(_processId.Value);
                app.WaitForInputIdle();
                var control = app.WindowControl;
                // This is not only necessary to potentially wait, but also to populate the parent property in the control.
                control.WaitTillFound();
                list = control.DescendantControls(_searchCriterion).ToList();
            }
            else
            {
                list = Control.RootChildControls(_searchCriterion).ToList();
            }

            var rows = new Collection <Collection <string> > {
                new Collection <string> {
                    "Automation Id", "Name", "Value", "Location"
                }
            };

            foreach (var entry in list)
            {
                var position = Mouse.AbsolutePosition(entry.AutomationElement);
                var row      = new Collection <string> {
                    entry.AutomationId, entry.Name, entry.Value, Invariant($"x:{position.X}, y:{position.Y}")
                };
                rows.Add(row);
            }
            return(rows);
        }