2010-02-22 103 views
1

我目前在Windows WF中使用順序工作流程,但需要拆分流程,因爲我現在有多個工作流程需要共享一項功能。我相信有一種方法可以在WF中創建自定義代碼活動,基本可以實現這一點,但是我的計劃是最終讓WF支持無狀態;因此,我現在不想花時間學習如何編寫自定義活動。從另一個工作流程中運行工作流程

我能想到的唯一的事情就是創建一個包含所有「共享」行爲的新WF項目,然後從需要它們的工作流程中啓動它們。我現在正在研究它,看看它是如何發展的,但是誰能告訴我這是不是一個壞主意?

編輯 - 一個「問題」我現在看到的是,我使用的是單爲WF運行時,因爲我已經經歷過大規模的內存泄漏,甚至當我處置WF RT的正確。我跟蹤工作流初始調用者中的所有WF實例,因此爲了正確處理事件,我必須將此WF實例列表傳遞到工作流中,以便它可以添加我在內部啓動的WF。對我來說似乎有點混亂,儘管我仍然可以這樣嘗試。我跟蹤WF實例,因爲我試圖使用它來啓用暫停/終止/恢復功能。當用戶單擊GUI中的相應按鈕時,它會遍歷所有WF實例並調用匹配方法。

回答

1

將工作流拆分爲不同部分的主要問題是它們完全斷開連接。這是主流不等待子工作流程完成的主要工作流程。這可以做,但需要做一些。

另一個想到要記住的是錯誤處理。當一個子工作流程出錯時,主工作流程不知道這一點,與添加子活動的行爲完全不同。

如果您需要重用邏輯,您還可以使用設計器創建複合活動。這與開發工作流程非常相似,您可以根據需要在多個工作流程上重複使用這些活動。

+0

謝謝,莫里斯,我會研究你的建議。然而,爲了扮演魔鬼的擁護者,爲什麼主工作流程不會等待子流程完成?我在啓動子工作流實例的主WF中有一個代碼活動,但我使用AutoResetEvent來創建代碼活動塊。只有在子工作流完成(並在WorkflowCompleted處理程序中設置事件)之後,主工作流纔會繼續。我目前正在處理錯誤處理 - 我應該使用try/catch還是FaultHandlers? – Dave 2010-02-22 17:25:33

+0

我想我需要重新閱讀這篇文章:http://msdn.microsoft.com/en-us/magazine/dd419656.aspx – Dave 2010-02-22 17:27:20

+0

Maurice,在成功實現了工作流程中的工作流程方法後,我嘗試了您的建議。我非常興奮地看到創建一個自定義活動非常簡單和合乎邏輯,您可以將其放入其他工作流程中。我現在唯一的問題是,將傳遞到工作流中的參數傳入自定義活動的機制是什麼?由於該活動在工作流程內部,因此我期望它能以某種方式訪問​​工作流參數,但尚未找到答案。 **編輯**好的,我戳了一下,剛纔看到他們在設計師的屬性窗口! – Dave 2010-02-22 20:52:41