WinForms ShowDialog()-未打开任何模式对话框
我想在浏览器名称空间扩展中打开一个对话框作为登录框。当我第一次调用ShowDialog()时,该框将打开,但不是作为模式对话框。我可以单击资源管理器中的元素。如果我关闭这些对话框并再次打开,它将是一个模式对话框,无法与资源管理器进行交互。这就是我想在第一场公开赛中实现的目标 我的想法是首先从错误的线程调用表单。这就是我使用以下代码的原因,但它不能解决问题:/WinForms ShowDialog()-未打开任何模式对话框,winforms,showdialog,Winforms,Showdialog,我想在浏览器名称空间扩展中打开一个对话框作为登录框。当我第一次调用ShowDialog()时,该框将打开,但不是作为模式对话框。我可以单击资源管理器中的元素。如果我关闭这些对话框并再次打开,它将是一个模式对话框,无法与资源管理器进行交互。这就是我想在第一场公开赛中实现的目标 我的想法是首先从错误的线程调用表单。这就是我使用以下代码的原因,但它不能解决问题:/ public delegate void myDelegate(); public void ShowDialogThreadS
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。。。问题是什么?第一次调用此方法的上下文是什么?您能显示运行此方法的代码以及它的位置吗?我编辑了我的问题您在哪里创建
loginDialog
?(在UI线程上?)如果InvokeRequired
为false,这只会告诉您处于创建它的同一线程中,不一定是UI线程(检查线程ID)。另一方面,在显示表单之前,InvokeRequired
总是处处为false。@KekuSemau我在一个类中创建它来处理登录。这个类由内置函数调用,我不知道UIThread是否调用它。如何确定它是否是UIThread?我在UI线程外部调用loginDialog
。正因为如此,我想使用Application.Current.Dispatcher.CheckAccess()
和Application.Current.Dispatcher.Invoke(new System.Action(()=>logInMethod())代码>但我的应用程序没有当前线程。第一次调用此方法的上下文是什么?您能显示运行此方法的代码以及它的位置吗?我编辑了我的问题您在哪里创建loginDialog
?(在UI线程上?)如果InvokeRequired
为false,这只会告诉您处于创建它的同一线程中,不一定是UI线程(检查线程ID)。另一方面,在显示表单之前,InvokeRequired
总是处处为false。@KekuSemau我在一个类中创建它来处理登录。这个类由内置函数调用,我不知道UIThread是否调用它。如何确定它是否是UIThread?我在UI线程外部调用loginDialog
。正因为如此,我想使用Application.Current.Dispatcher.CheckAccess()
和Application.Current.Dispatcher.Invoke(new System.Action(()=>logInMethod())代码>但我的应用程序没有当前线程。