0
프리즘의 EventAggregator 기능을 사용하면 클래스를 느슨하게 결합 할 수 있습니다. 하지만 지금은 EventAggregator에서 다루지 않는 문제가 있습니다.EventAggregator 나중에 사용하기 위해 메시지를 연기
그래서 "Test"라는 메시지를 게시하고이 메시지의 구독자가 없다고 가정합니다. 구독자가있을 때까지 연기 할 수 있습니까?
감사합니다.
프리즘의 EventAggregator 기능을 사용하면 클래스를 느슨하게 결합 할 수 있습니다. 하지만 지금은 EventAggregator에서 다루지 않는 문제가 있습니다.EventAggregator 나중에 사용하기 위해 메시지를 연기
그래서 "Test"라는 메시지를 게시하고이 메시지의 구독자가 없다고 가정합니다. 구독자가있을 때까지 연기 할 수 있습니까?
감사합니다.
구현하기가 쉽습니다. 나중에 발표 될 두 번째 메시지와 메시지를 포함하는 클래스와 타이머를 정의합니다
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 컨테이너에 개인 필드로 드롭 할 수 있습니다.
정말 감사합니다. 한가지 더 질문 : 타이머 간격을 1 초로 설정하면 성능 문제가 있습니까? 구독자가있을 때 리소스를 "깨우는"솔루션 만 더 많은 리소스를 사용할 수 있습니까? – user2653422
무거운 처리를하지 않는 한 사용자에게 눈에 띄지 않습니다. 그러나 청취자가 작성되기 전에 알 수없는 시간이 있거나 청취자가 없을 수도있는 경우, 1 초간의 재 공개보다는 수행중인 작업 부하 (플래그에 따라)로 설정된 청취자를 확실히 연결해야합니다. – bland