WinForms ShowDialog() - 没有模态对话框打开

时间:2016-05-04 05:58:03

标签: winforms showdialog

我想在Explorer-NamespaceExtension中打开一个对话框作为Login-Box。当我第一次打开框而不是模态对话框时,我调用ShowDialog()。我可以在资源管理器中单击元素。如果我关闭这些对话框并再次打开它,它就是一个模态对话框,并且与Explorer的交互是不可能的。这就是我想要在第一次打开时实现的目标。

我的想法是我先从错误的帖子中调用表单。这就是为什么我使用下面的代码,但它没有解决问题:/

public delegate void myDelegate();

    public void ShowDialogThreadSave()
    {
        if (this.InvokeRequired)
        {
            myDelegate d = new myDelegate(ShowDialogThreadSave);
            this.Invoke(d);
        }
        else
        {
            this.ShowDialog();
        }
    }

我希望你有个主意:-) 谢谢!

编辑: 该调用是从后台类触发的。我有3种可能性登录扩展,所以我封装了调用:

public bool LogIn()
        {
            bool connected = BackEnd.isConnected();

            if(loginDialog == null)
            {
                LogIn logIn = new LogIn();
            }
            else
            {
                if (!connected && !Utils.AlreadyLoggedIn() && !loginDialog.IsAccessible && !loginDialog.Visible)
                    loginDialog.ShowDialogThreadSave();
                else if (!connected && !Utils.AlreadyLoggedIn() && !loginDialog.Visible)
                    loginDialog.ShowDialogThreadSave();
                else if (!connected && !Utils.AlreadyLoggedIn() && loginDialog.Visible)
                    LOG.DebugFormat("error");
                else
                    Utils.ConnectWithoutLoginWindow();
            }
            connected = BackEnd.isConnected();

            return connected;
        }

Edit2:通过调试我发现ShowDialogThreadSave()总是由UI线程调用,我永远不会使用if ...有什么问题?

0 个答案:

没有答案