如何在不使用e.Handled = true的情况下防止两次调用Closing事件?

时间:2017-04-25 16:39:38

标签: c# wpf events routed-events

我有一个标签ng-show事件的处理程序,它显示确认关闭消息。 如果用户选择,我会设置Closing,但如果他选择关闭,我会从标签列表中删除该标签并执行其他操作, 当方法到达终点时,它会再次被调用,显示相同的消息,我尝试在方法的末尾设置e.Handled = true;,但标签不会关闭。

e.Handled = true;

此方法订阅事件:

void oTab_TabClosing(object sender, RoutedEventArgs e)
{
    var close = MainClass.ShowMessage(ResCommon.MsgConfirmClose, ResCommon.ttlClose, MainClass.MessageButtons.YesNO);
    if (!close)
    {
        e.Handled = true;
        return;
    }
    FabTab.FabTabItem oTabItem = (FabTab.FabTabItem)sender;
    if (HtOpenTabs.ContainsKey(oTabItem.Name)) HtOpenTabs.Remove(oTabItem.Name);
    oTabItem = null;

    GC.Collect();
    GC.WaitForPendingFinalizers();
}

1 个答案:

答案 0 :(得分:0)

似乎在HtOpenTabs.Remove(oTabItem.Name);

中触发了第二个事件

在删除标签之前,请尝试取消订阅此事件处理程序。