show和showdialog在c#net中的表单关闭方面有什么区别

show和showdialog在c#net中的表单关闭方面有什么区别,c#,webbrowser-control,showdialog,objectdisposedexception,C#,Webbrowser Control,Showdialog,Objectdisposedexception,我正在开发winform应用程序,需要在其中显示弹出窗口。我目前正在使用ShowDialog()方法进行此操作。但由于需求的变化,我想将其显示为非对话框。所以我使用了show()方法而不是showDialog() 我的弹出窗口使用windows webBrowse控件作为其子控件之一 我的问题是,当我使用showDialog()方法时,一切都很好。 但是,当我使用show()方法并关闭弹出窗口时(一旦用户完成工作),show()方法会以某种方式调用webBrowse控件的dispose方法,这会

我正在开发winform应用程序,需要在其中显示弹出窗口。我目前正在使用ShowDialog()方法进行此操作。但由于需求的变化,我想将其显示为非对话框。所以我使用了show()方法而不是showDialog()

我的弹出窗口使用windows webBrowse控件作为其子控件之一

我的问题是,当我使用showDialog()方法时,一切都很好。 但是,当我使用show()方法并关闭弹出窗口时(一旦用户完成工作),show()方法会以某种方式调用webBrowse控件的dispose方法,这会阻止我再次重新启动同一弹出窗口,并导致“无法访问已处置对象”错误

这是show()方法或webBrowse控件中的预期行为。如果是,那么我如何解决它

注意:弹出对话框是使用DI在presenter中注入的,因此每次处置后都无法注入弹出对话框


提前感谢。

使用showdialog()您无法返回到父窗体,只需使用show()您就可以返回,这就是所有的使用
show()
,您的代码将转到show语句后的行。使用
ShowDialog()

您可以尝试使用
Hide()
而不是
Close()

将其放入对话框窗口的构造函数中(这是一个WPF示例)

然后取消关闭事件并像这样隐藏窗口

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
    this.Hide();
}

在那之后,你应该能够重新打开一个关闭的窗口,因为它不是被释放的,而是隐藏的。问题是,在重新打开窗口之前,您必须手动清理窗口内容,因为它包含上次使用的内容。

看起来很有趣,您可以发布代码吗?show方法没有配置控件的规定,除非由显式用户操作或代码触发。添加更多详细信息以更好地理解这可能是原因,代码在代码中处理控件时会执行得更远
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    e.Cancel = true;
    this.Hide();
}