【发布时间】:2021-08-19 08:34:33
【问题描述】:
我正在尝试创建自己的自定义 ToolTip 类,并在构造函数中注册 Loading 事件。如何退订此活动?当我在终结器/析构函数中执行此操作时,它会导致异常,尤其是当我打开应用程序的新窗口并关闭它时:
无法使用已与其底层 RCW 分离的 COM 对象。
这是我的代码:
public class CustomToolTip: ToolTip
{
public CustomToolTip()
{
this.Loading += CustomToolTip_Loading;
}
protected void CustomToolTip_Loading(Windows.UI.Xaml.FrameworkElement sender, object args)
{
// my logic here
}
~CustomToolTip()
{
this.Loading -= CustomToolTip_Loading;
}
}
当我创建自定义 Flyout 控件并尝试在终结器中取消订阅 Opening 事件时,也会发生此异常。
我的代码:
public class CustomFlyout: Flyout
{
public CustomFlyout()
{
this.Opening += CustomFlyout_Opening;
}
private void CustomFlyout_Opening(object sender, object e)
{
// my logic here
}
~CustomFlyout()
{
this.Opening -= CustomFlyout_Opening;
}
}
任何帮助将不胜感激。
【问题讨论】:
-
清理终结器中的事件对我来说没有多大意义,因为如果由于事件引用而无法清理对象,除非我遗漏了什么,否则终结器将不会被调用。我会实现 IDisposable 但您也可以在 Unloaded 事件中将事件设置为 null。
标签: c# windows xaml uwp uwp-xaml