关闭 WPF 时出现异常 window
Exception when closing WPF window
我正在以这种方式创建并展示一个新的 window :
GammeDetail gammeDetail = new GammeDetail(_barCode, userID);
gammeDetail.ShowDialog();
在 class 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.
我有另一个函数,它是一个事件处理函数,但确实关闭了当前 window,如下所示:
private void newScan_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
在这种情况下,它按我想要的方式完美运行,我尝试创建相同的函数,但没有将其作为事件处理程序,但它抛出与之前相同的异常。
我不明白为什么当函数是事件处理程序时它不抛出任何异常。
如果您有任何想法,我很乐意听取他们的意见。
(如果您需要一段特定的代码来提供帮助,请随时询问,而不是在没有帮助的情况下投票。)
因为您的构造函数中存在异常,window 正在关闭,然后您尝试在已关闭的 window 上使用 .ShowDialog()。
在调用 .ShowDialog()
之前,您需要处理异常或检查 window 是否尚未关闭
没有理由在 window 创建之前尝试将其关闭。在构造函数返回之前,没有要关闭的 window。
您应该在创建 window:
实例的代码中处理任何异常
GammeDetail gammeDetail;
try
{
gammeDetail = new GammeDetail(_barCode, userID);
gammeDetail.ShowDialog();
}
catch (Exception)
{
//the window was never opened...
}
我正在以这种方式创建并展示一个新的 window :
GammeDetail gammeDetail = new GammeDetail(_barCode, userID);
gammeDetail.ShowDialog();
在 class 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.
我有另一个函数,它是一个事件处理函数,但确实关闭了当前 window,如下所示:
private void newScan_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
在这种情况下,它按我想要的方式完美运行,我尝试创建相同的函数,但没有将其作为事件处理程序,但它抛出与之前相同的异常。
我不明白为什么当函数是事件处理程序时它不抛出任何异常。
如果您有任何想法,我很乐意听取他们的意见。 (如果您需要一段特定的代码来提供帮助,请随时询问,而不是在没有帮助的情况下投票。)
因为您的构造函数中存在异常,window 正在关闭,然后您尝试在已关闭的 window 上使用 .ShowDialog()。 在调用 .ShowDialog()
之前,您需要处理异常或检查 window 是否尚未关闭没有理由在 window 创建之前尝试将其关闭。在构造函数返回之前,没有要关闭的 window。
您应该在创建 window:
实例的代码中处理任何异常GammeDetail gammeDetail;
try
{
gammeDetail = new GammeDetail(_barCode, userID);
gammeDetail.ShowDialog();
}
catch (Exception)
{
//the window was never opened...
}