weak-event
Version:
C#-Style Typescript Events/Weak Events
46 lines (45 loc) • 2.04 kB
TypeScript
import { FinalizableEventHandlerRef } from './weak-event-finalization';
import { EventInvocationOpts, IEventSource, ITypedEvent, TypedEventHandler } from '../typed-event-interfaces';
/**
* An event who's handlers are weakly referenced
*
* @description Handlers attached to this event are weakly referenced and as such may be garbage collected
* if the handler goes out of scope. This prevents certain types of event-related memory leaks.
*
* For information regarding this pattern, please visit:
* * https://v8.dev/features/weak-references
* * https://docs.microsoft.com/en-us/dotnet/desktop/wpf/advanced/weak-event-patterns
*
* @export
* @class WeakEvent
* @implements {IEventSource<TSender, TArgs>}
* @param {TSender} sender The event's source (usually the particular instance raising the event)
* as should be provided to the event handlers
* @param {TArgs} args The arguments to provide to the handlers
*/
export declare class WeakEvent<TSender, TArgs> implements IEventSource<TSender, TArgs> {
private _handlers;
private _refHolder;
private _handlerFinalizedEvent;
/**
* An event that is raised after a handler has been reclaimed by GC and had its
* finalizer run
*
* @description One possible use for this event is as as diagnostic tool to determine whether event handler leaks
* exist
*
* @type {ITypedEvent<this, FinalizableEventHandlerRef<TSender, TArgs>>}
* @memberof WeakEvent
*/
handlerFinalizedEvent: ITypedEvent<this, FinalizableEventHandlerRef<TSender, TArgs>>;
constructor();
invoke(sender: TSender, args: TArgs, options?: EventInvocationOpts): void;
invokeAsync(sender: TSender, args: TArgs, options?: EventInvocationOpts): Promise<void>;
private sequentialInvokeAsync;
private parallelInvokeAsync;
attach(handler: TypedEventHandler<TSender, TArgs>): void;
detach(handler: TypedEventHandler<TSender, TArgs>): void;
private onHandlerFinalizer;
private tryRemoveHandlerRef;
private releaseHandler;
}