IClosableNotifier 接口

定义

在 WinRT 运行时类中实现时,提供已关闭对象(已释放)的通知。

public interface class IClosableNotifier
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.Foundation.WindowsAppSDKContract, 65540)]
/// [Windows.Foundation.Metadata.Guid(696903995, 60687, 24185, 144, 242, 234, 197, 146, 252, 110, 106)]
struct IClosableNotifier
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.Foundation.WindowsAppSDKContract), 65540)]
[Windows.Foundation.Metadata.Guid(696903995, 60687, 24185, 144, 242, 234, 197, 146, 252, 110, 106)]
public interface IClosableNotifier
Public Interface IClosableNotifier
派生
属性

注解

此接口的目的是在基础对象关闭(释放)时提供可靠的通知,以及检查对象是否已关闭的方法。

通常,如果对象依赖于该 WinRT 对象来满足其功能,则需要知道何时关闭另一个 WinRT 对象。 如果它所依赖的 WinRT 对象已关闭,则可以执行清理操作和/或从事件中注销。

引发事件时的对象状态

处理 ClosedFrameworkClosed 事件时,基础 WinRT 对象已关闭。 如果尝试访问对象的属性(IsClosed除外)或方法,则在此点之后返回 RO_E_CLOSED。 允许的唯一操作是取消订阅事件并检查对象上的 IsClosed 属性。

事件顺序

ClosedFrameworkClosed 事件成对引发。 首先会引发 FrameworkClosed 事件,让框架有机会清理其状态,然后引发 Closed 事件,使应用程序代码有机会进行清理。

框架响应第一个事件,以便他们可以为应用程序准备在对象关闭后调用框架。 例如,框架可能会 null-out 内部状态,以便尝试使用该状态的应用程序将收到适当的错误,而不是尝试对无效状态进行操作。

WinRT 对象可以关闭的可能方式

  • 如果 WinRT 对象绑定到某个线程,则通常在线程退出时关闭。
  • 如果 WinRT 对象实现 IClosable.Close,外部代码可以显式请求关闭它。
  • 如果释放了对对象的最后一个强引用,则可以关闭该对象。

事件没有发送方或参数

如果在已释放的 WinRT 对象上引发 ClosedFrameworkClosed 事件,并且内存中没有任何更强大的引用,则 发送方TypedEventHandler 的事件参数将 null。 为了支持这种情况,这些事件不提供 发送方 或事件参数,ClosableNotifierHandler 不采用任何参数。 事件的订阅者负责知道其订阅的 WinRT 对象。

属性

IsClosed

获取一个值,该值指示对象是否已关闭(释放)。

事件

Closed

FrameworkClosed 事件后关闭对象(释放)时发生,以通知应用对象已关闭。

FrameworkClosed

已关闭 事件之前关闭对象(释放)时发生,以通知框架(如 XAML)对象已关闭。

适用于