2014-01-09 37 views
4

我發佈了一個事件(我正在使用Microsoft.Practices.Prism.Events)。 此事件將在其他地方處理。然後我希望等到處理完成之後(我不關心在哪裏或通過誰),然後繼續處理代碼,我希望處理程序將一些狀態置於事件arg中,以便我可以使用該狀態(例如,成功打印或未成功打印),然後再決定下一步做什麼。Prism在處理已發佈事件時得到通知

我應該開始一個線程並檢查arg.Status(我可以讓訂閱者在處理時設置)嗎?

Or或者,訂戶是否應該提出另一個事件說發佈完成或什麼?

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

您提到的替代方案都是正確的。但是,如果打印動作將從多個站點打算,我會選擇第二個事件方法,考慮到解決方案的簡單性及其可擴展性。

處理PrintCustomerAccountSummaryReportRequestedEvent事件之後,印刷版訂戶將最終提出一個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. 
} 

我希望這對你有所幫助,

問候。

相關問題