>我正在以这种方式创建和显示一个新窗口:
GammeDetail gammeDetail = new GammeDetail(_barCode, userID);
gammeDetail.ShowDialog();
在类GammeDetail
的构造函数中,我正在尝试这样做:
try
{
this._numLot = barcode.Substring(0, barcode.Length - 2); ;
this._numGamme = barcode.Substring(barcode.Length - 2);
}
catch
{
this.Close();
}
但这会在gammeDetail.ShowDialog();
抛出以下异常Cannot set Visibility or call Show, ShowDialog, or WindowInteropHelper.EnsureHandle after a Window has closed.
我还有另一个函数,它是一个事件处理函数,但确实关闭了当前窗口,如下所示:
private void newScan_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
在这种情况下,它按照我想要的完美方式工作,我尝试制作相同的函数,但没有将其设置为事件处理程序,但它会抛出相同的先前异常。
我不明白为什么当函数是事件处理程序时它不会引发任何异常。
如果你有任何想法,我很高兴听到他们。(如果您需要一段特定的代码来提供帮助,请随时询问而不是在没有帮助的情况下投反对票。
没有理由在创建窗口之前尝试关闭窗口。在构造函数返回之前,没有要关闭的窗口。
您应该在创建窗口实例的代码中处理任何异常:
GammeDetail gammeDetail;
try
{
gammeDetail = new GammeDetail(_barCode, userID);
gammeDetail.ShowDialog();
}
catch (Exception)
{
//the window was never opened...
}
因为构造函数中存在异常,所以窗口正在关闭,然后您尝试使用 .关闭窗口上的 ShowDialog((。在调用 之前,您需要处理异常或检查窗口是否尚未关闭。显示对话框((