首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF 從入門到精通(第十章):事件驅動活動與宿主雙向通訊實戰

     編輯:關於.NET

章節目標

  • 掌握 HandleExternalEvent、Delay、EventDriven、Listen、EventHandlingScope 五大事件活動
  • 理解事件活動間的容器與觸發關係
  • 完整實作 eBroker 股票監控系統:工作流與 WinForms 宿主雙向通訊

事件活動體系總覽

活動類型核心作用
HandleExternalEvent基本處理外部事件(宿主→工作流),需指定 InterfaceType、EventName、CorrelationToken
Delay基本實作 IEventActivity,TimeoutDuration 到期觸發事件,可構建計時器
EventDriven組合順序容器,**首個子活動必須為 IEventActivity**,事件觸發前不執行內容
Listen組合並行容器,**僅容納 EventDriven**(≥2),先觸發者執行,其餘取消
EventHandlingScope組合含事件處理器集合 + 單一非事件子活動,事件全處理完才繼續後續流程

關鍵限制與設計考量

  • Listen 禁止用於 State Machine 工作流,防止事件循環(類似死鎖)
  • EventDriven 父活動僅限 Listen、State、StateMachineWorkflow
  • 使用 wca.exe 針對通訊介面產生強型別活動(衍生自 CallExternalMethod/HandleExternalEvent),自動綁定事件參數屬性

eBroker 實戰:股票即時監控系統

通訊介面 IWFBroker

[ExternalDataExchange]
public interface IWFBroker {
    void MarketUpdate(string xmlMarketValues); // 工作流→宿主
    event EventHandler AddTicker;
    event EventHandler RemoveTicker;
    event EventHandler BuyStock;
    event EventHandler SellStock;
    event EventHandler Stop;
}

事件參數:TickerActionEventArgs(XML 股票資訊)、SharesActionEventArgs(代碼+張數)、StopActionEventArgs(無資料)。

工作流結構設計

  1. Code(Initialize):初始化輪詢間隔、載入股票字典
  2. EventHandlingScope:
    • 事件處理器:EventDriven → Stop 監聽停止指令
    • 主體:While(TestContinue=true) → Sequence →
      • Code(UpdateMarketValues):蒙地卡羅模擬產生新價格、趨勢、買賣建議
      • MarketUpdate:序列化更新集合 XML 發送宿主
      • Listen(5 條分支):
        • EventDriven → Delay(updateDelay):輪詢計時器
        • EventDriven → SellStock → Code(SellStock)
        • EventDriven → BuyStock → Code(BuyStock)
        • EventDriven → RemoveTicker → Code(RemoveTicker)
        • EventDriven → AddTicker → Code(AddTicker)

Listen 中 Delay 觸發 → While 繼續下一輪;其他事件觸發 → 執行對應代碼 → Listen 結束 → While 重新進入 Listen 監聽。

本地通訊服務 BrokerDataConnector

實作 IWFBroker,提供 RaiseAddTicker 等方法供宿主調用觸發事件。宿主透過 _workflowRuntime.GetService<BrokerDataConnector>() 取得服務實例,調用 RaiseXxx(instanceId, ...) 將使用者操作推送至工作流。

宿主 UI 互動

  • 主視窗顯示股票代碼、現價、總值、趨勢、買賣建議(紅/綠標記)
  • 新增/移除股票、買入/賣出股份、停止模擬(Quit 按鈕觸發 RaiseStop)
  • 股票清單持久化至 Settings XML,啟動自動載入

多執行緒資料共享風險提醒

工作流與宿主若共享物件參考,需注意同步。本範例採用 XML 序列化傳遞資料,避免共享狀態。若必須共享,建議實作 ICloneable 或使用序列化隔離。

總結

事件活動構建了 WF 響應式程式設計基石:HandleExternalEvent 接收外部通知,Delay 提供時間觸發,EventDriven/Listen 編排順序/並行事件處理,EventHandlingScope 整合背景事件監聽與前台流程。配合 wca.exe 強型別活動與本地通訊服務,可快速建立宿主與工作流雙向通訊的企業級應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved