import { IPromiseEvent } from './IPromiseEvent';
import { IPromiseEventHandler } from './IPromiseEventHandler';
import { IPropagationStatus, PromiseDispatcherBase } from "ste-core";
/**
 * Dispatcher implementation for events. Can be used to subscribe, unsubscribe
 * or dispatch events. Use the ToEvent() method to expose the event.
 *
 * @export
 * @class PromiseEventDispatcher
 * @extends {PromiseDispatcherBase<IPromiseEventHandler<TSender, TArgs>>}
 * @implements {IPromiseEvent<TSender, TArgs>}
 * @template TSender
 * @template TArgs
 */
export declare class PromiseEventDispatcher<TSender, TArgs> extends PromiseDispatcherBase<IPromiseEventHandler<TSender, TArgs>> implements IPromiseEvent<TSender, TArgs> {
    /**
     * Creates a new EventDispatcher instance.
     */
    constructor();
    /**
     * Dispatches the event.
     *
     * @param {TSender} sender The sender object.
     * @param {TArgs} args The argument object.
     * @returns {Promise<IPropagationStatus>} The status.
     *
     * @memberOf PromiseEventDispatcher
     */
    dispatch(sender: TSender, args: TArgs): Promise<IPropagationStatus>;
    /**
     * Dispatches the event without waiting for the result.
     *
     * @param {TSender} sender The sender object.
     * @param {TArgs} args The argument object.
     *
     * @memberOf PromiseEventDispatcher
     */
    dispatchAsync(sender: TSender, args: TArgs): void;
    /**
     * Creates an event from the dispatcher. Will return the dispatcher
     * in a wrapper. This will prevent exposure of any dispatcher methods.
     */
    asEvent(): IPromiseEvent<TSender, TArgs>;
}
