react-native-windows/vnext/Microsoft.ReactNative.Managed/ReactNotificationSubscripti...

44 строки
1.5 KiB
C#

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
namespace Microsoft.ReactNative.Managed
{
public struct ReactNotificationSubscription
{
public ReactDispatcher Dispatcher => new ReactDispatcher(IsValid ? Handle.Dispatcher : null);
// Name of the notification.
public ReactPropertyName NotificationName => new ReactPropertyName(IsValid ? Handle.NotificationName : null);
public ReactNotificationService NotificationService => new ReactNotificationService(IsValid ? Handle.NotificationService : null);
// True if the subscription is still active.
// This property is checked before notification handler is invoked.
public bool IsSubscribed => IsValid ? Handle.IsSubscribed : false;
public IReactNotificationSubscription Handle { get; }
public bool IsValid => Handle != null;
public static explicit operator bool(ReactNotificationSubscription subscription) => subscription.IsValid;
public ReactNotificationSubscription(IReactNotificationSubscription handle = null)
{
Handle = handle;
}
// Remove the subscription.
// Because of the multi-threaded nature of the notifications, the handler can be still called
// after the Unsubscribe method called if the IsSubscribed property is already checked.
// Consider calling the Unsubscribe method and the handler in the same IReactDispatcher
// to ensure that no handler is invoked after the Unsubscribe method call.
public void Unsubscribe()
{
if (IsValid)
{
Handle.Unsubscribe();
}
}
}
}