IClosableNotifier 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在 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 对象已关闭,则可以执行清理操作和/或从事件中注销。
引发事件时的对象状态
处理 Closed
或 FrameworkClosed
事件时,基础 WinRT 对象已关闭。 如果尝试访问对象的属性(IsClosed
除外)或方法,则在此点之后返回 RO_E_CLOSED
。 允许的唯一操作是取消订阅事件并检查对象上的 IsClosed
属性。
事件顺序
Closed
和 FrameworkClosed
事件成对引发。 首先会引发 FrameworkClosed
事件,让框架有机会清理其状态,然后引发 Closed
事件,使应用程序代码有机会进行清理。
框架响应第一个事件,以便他们可以为应用程序准备在对象关闭后调用框架。 例如,框架可能会 null
-out 内部状态,以便尝试使用该状态的应用程序将收到适当的错误,而不是尝试对无效状态进行操作。
WinRT 对象可以关闭的可能方式
- 如果 WinRT 对象绑定到某个线程,则通常在线程退出时关闭。
- 如果 WinRT 对象实现
IClosable.Close
,外部代码可以显式请求关闭它。 - 如果释放了对对象的最后一个强引用,则可以关闭该对象。
事件没有发送方或参数
如果在已释放的 WinRT 对象上引发 Closed
和 FrameworkClosed
事件,并且内存中没有任何更强大的引用,则 发送方 和 TypedEventHandler 的事件参数将 null
。 为了支持这种情况,这些事件不提供 发送方 或事件参数,ClosableNotifierHandler 不采用任何参数。 事件的订阅者负责知道其订阅的 WinRT 对象。
属性
IsClosed |
获取一个值,该值指示对象是否已关闭(释放)。 |
事件
Closed |
在 FrameworkClosed 事件后关闭对象(释放)时发生,以通知应用对象已关闭。 |
FrameworkClosed |
在 已关闭 事件之前关闭对象(释放)时发生,以通知框架(如 XAML)对象已关闭。 |