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, от него зависит, можно выполнять операции очистки и (или) отменять регистрацию из событий.
Состояние объекта при вызове событий
При обработке события Closed
или FrameworkClosed
базовый объект WinRT уже закрыт. Если вы пытаетесь получить доступ к свойствам объекта (кроме IsClosed
) или методов, RO_E_CLOSED
возвращается после этой точки. Единственными допустимыми операциями являются отмена подписки на события и проверка свойства IsClosed
объекта.
Порядок событий
События Closed
и FrameworkClosed
создаются в парах. Сначала вызывается событие FrameworkClosed
, чтобы дать платформам возможность очистить свое состояние, а затем вызывается событие Closed
, чтобы также дать коду приложения возможность очистки.
Платформы реагируют на первое событие, чтобы они могли подготовиться к вызову приложения в платформу после закрытия объекта. Например, платформа может null
внутреннее состояние, чтобы приложения, пытающиеся использовать это состояние, получат соответствующую ошибку, а не пытается работать с недопустимым состоянием.
Возможные способы закрытия объекта WinRT
- Если объект WinRT привязан к определенному потоку, он обычно закрывается при выходе потока.
- Если объект WinRT реализует
IClosable.Close
, внешний код может явно запрашивать его закрытие. - Если была выпущена последняя строчная ссылка на объект, объект можно закрыть.
Нет отправителя или аrgs для события
Если события Closed
и FrameworkClosed
создаются на объекте WinRT, который был удален и не содержит более сильных ссылок, содержащих его в памяти, то отправитель и параметры событий TypedEventHandler будут null
. Чтобы поддержать этот случай, эти события не предоставляют отправителя или события, а ClosableNotifierHandler не принимает никаких параметров. Подписчик событий отвечает за знание того, на какой объект WinRT он подписан.
Свойства
IsClosed |
Возвращает значение, указывающее, закрыт ли объект (удален). |
События
Closed |
Происходит, когда объект был закрыт (удален), после события FrameworkClosed, чтобы уведомить приложение о закрытии объекта. |
FrameworkClosed |
Происходит, когда объект был закрыт (удален), перед событием закрытого |