我想在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 ...有什么问题?