private void ShowTopLevel(Control control, object[] propertyObjects, bool modal, Action <Form> shownAction)
        {
            //if (TestContext.CurrentContext.Test.Properties["_CATEGORIES"])

            ThrowIfPropertyObjectsContainsActionDueToLikelyMisuse(propertyObjects);

            GuiTestHelper.Initialize();

            formShown = shownAction;

            if (control.TopLevelControl == control)
            {
                ShowTopLevelControl(control, modal);
            }
            else
            {
                ShowControlInTestForm(control, modal, propertyObjects);
            }

            // clear all controls shown as non-modal after modal control closes
            if (!modal)
            {
                var testName = TestContext.CurrentContext.Test.FullName;

                if (string.IsNullOrEmpty(nonModalControlsTestName))
                {
                    nonModalControlsTestName = testName;
                }
                else
                {
                    if (nonModalControlsTestName != testName)
                    {
                        var errorMessage = string.Format("Did you forget to call WindowsFormsTestHelper.CloseAll() at the end of the following test: {0}?", nonModalControlsTestName);
                        nonModalControlsTestName = testName; // reset for the next test
                        throw new InvalidOperationException(errorMessage);
                    }
                }

                nonModalControls.Add(this);
            }
            else
            {
                CloseAll();

                Close();
                Dispose();

                control.Dispose();
            }
        }
        private void ShowTopLevel(Control control, object[] propertyObjects, bool modal, Action shownAction)
        {
            ThrowIfPropertyObjectsContainsActionDueToLikelyMisuse(propertyObjects);

            GuiTestHelper.Initialize();

            this.shownAction = shownAction;

            if (control is Window)
            {
                ShowTopLevelControl(control, modal);
            }
            else
            {
                ShowControlInTestForm(control, modal, propertyObjects);
            }

            // clear all controls shown as non-modal after modal control closes
            if (!modal)
            {
                throw new NotImplementedException();
            }
            else
            {
                WindowsFormsTestHelper.CloseAll(); // just in case, since we have mixed WPF / WF app

                Close();

                if (window != null)
                {
                    window.Closed += delegate { Console.WriteLine("Closed"); };

                    window.Close();
                    window.Close();

                    while (window.IsVisible)
                    {
                        System.Windows.Forms.Application.DoEvents();
                    }

                    window = null;
                }
            }
        }