2014-01-09 4 views
4

Я публикую событие (я использую Microsoft.Practices.Prism.Events). Это событие будет обработано в другом месте. Затем я хочу подождать, пока это не будет обработано (мне все равно, где и кем), прежде чем продолжить работу с кодом, я хочу, чтобы обработчик помещал некоторый статус в мой аргумент arg, поэтому я могу использовать этот статус (например, успешная печать или не удалось распечатать), прежде чем решить, что делать дальше.Призма получает уведомление о том, что опубликованное событие обработано

Должен ли я просто начать поток и проверить arg.Status (что я могу настроить для подписчиков при обработке)?

Или альтернативно, если абонент поднимет еще одно событие, в котором говорится, что публикация завершена или что-то еще?

public void Execute(object parameter) 
{ 
    var arg = new PrintCustomerAccountSummaryReportRequestedEventArgument { Customer = _viewModel.Customer, StartDate = _viewModel.ReportStartDate, EndDate = _viewModel.ReportEndDate }; 
    EventManager.Instance.GetEvent<PrintCustomerAccountSummaryReportRequestedEvent>().Publish(arg); 
    // Wait until something has handled the event 
    // then continue on and execute code. 
} 

ответ

0

Альтернативы, которые вы упомянули, были бы правильными. Тем не менее, я бы выбрал второй подход PrintResult с учетом простоты решения и его расширяемости, если Операция печати будет рассчитана на несколько сайтов.

После обработки PrintCustomerAccountSummaryReportRequestedEvent событие, печати Subscriber наконец поднять PrintResult событие, где печати Издатель бы закончить свою работу с надлежащим сводном печати отчета, полученного параметра:

public Publisher(...) 
{ 
    ... 
    PrintResultEvent printResultEvent = this.eventAggregator.GetEvent<PrintResultEvent>(); 
    printResultEvent.Subscribe(PrintResultEventHandler); 
} 

public void Execute(object parameter) 
{ 
    var arg = new PrintCustomerAccountSummaryReportRequestedEventArgument { Customer = _viewModel.Customer, StartDate = _viewModel.ReportStartDate, EndDate = _viewModel.ReportEndDate }; 
    EventManager.Instance.GetEvent<PrintCustomerAccountSummaryReportRequestedEvent>().Publish(arg); 
    // Wait until something has handled the event 
    // then continue on and execute code. Result will be handled in following EventHandler. 
} 

private void PrintResultEventHandler(PrintCustomerAccountSummaryReportRequestedEventArgument result) 
{ 
    // Get print result and finish job accordingly. 
} 

Надеюсь, это вам помогло,

С уважением.

Смежные вопросы