0

クラスを疎結合するために Prism の EventAggregator が提供する機能がとても気に入っています。しかし、今 EventAggregator でカバーされていない問題があります。

それで、私がメッセージ「テスト」を発行し、現時点でこのメッセージのサブスクライバーがいないと仮定しましょう。サブスクライバーが存在するまで延期することは可能ですか?

よろしく

4

1 に答える 1

1

これは簡単に実装できます。後で発行される 2 番目のメッセージと、メッセージとタイマーを含むクラスを定義します。

public class OriginalMessage : CompositePresentationEvent<OriginalArgs> { }
public class MyDelayedMessage : CompositePresentationEvent<MyEventArgs> { }

public class DelayedMessage {
    EventAggregator _bus;
    OriginalMessage _msg;
    DispatcherTimer _timer;
    OriginalArgs _args;

    public DelayedMessage(
        EventAggregator bus,
        OriginalMessage sourceMessage,
        OriginalArgs args,
        TimeSpan delay
    ) {
        _bus = bus;
        _args = args;
        _msg = sourceMessage;
        _timer = new DispatcherTimer();
        _timer.Interval = delay;
        _timer.Tick += OnTimerTick;
    }

    void OnTimerTick(object sender, EventArgs args) {

        _bus.GetEvent<MyDelayedMessage>().Publish(_args);
    }
}

このオブジェクトを保持するには、コンテキストが必要です。プライベート フィールドとしてホスト IU コンテナーにドロップできます。

于 2013-09-03T14:42:06.690 に答える