关闭WPF窗口时出现异常

时间:2018-01-16 15:23:57

标签: c# wpf exception-handling event-handling

我正在以这种方式创建并展示一个新窗口:

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();
}

但是这会在Cannot set Visibility or call Show, ShowDialog, or WindowInteropHelper.EnsureHandle after a Window has closed.

上引发以下异常gammeDetail.ShowDialog();

我还有另一个函数,它是一个事件处理函数,但会关闭当前窗口,如下所示:

private void newScan_Click(object sender, RoutedEventArgs e)
 {
      this.Close();
 }

在这种情况下,它完全按照我的意愿运行,我试图创建相同的函数,但没有使它成为事件处理程序,但它抛出相同的先前异常。

我不明白为什么当函数是事件处理程序时它不会抛出任何异常。

如果您有任何想法,我会很高兴听到他们的意见。 (如果您需要一段特定的代码来帮助,请在没有帮助的情况下随意提出而不是低估...)

2 个答案:

答案 0 :(得分:3)

在创建窗口之前没有理由尝试关闭窗口。在构造函数返回之前,没有窗口要关闭。

您应该在创建窗口实例的代码中处理任何异常:

GammeDetail gammeDetail;
try
{
    gammeDetail = new GammeDetail(_barCode, userID);
    gammeDetail.ShowDialog();
}
catch (Exception)
{
    //the window was never opened...
}

答案 1 :(得分:1)

因为构造函数中存在异常,窗口正在关闭,然后您尝试在关闭的窗口上使用.ShowDialog()。 在调用.ShowDialog()

之前,您需要处理异常或检查窗口是否尚未关闭