2011-05-05 21 views
2

我剛開始用WF4包裝頭部;我正在努力理解爲什麼我的輸出在我的工作流程中是空白的。WorkFlow Foundation 4 WorkflowApplication已完成的輸出爲空

首先,我有一個包含Sequence對象(或Activity?)的.xaml;這又包含了「FirstCodeActivity」,它包含以下代碼:

public class FirstCodeActivity : NativeActivity 
{ 
    public OutArgument<string> FirstCodeHasExecuted { get; set; } 

    protected override void Execute(NativeActivityContext context) 
    { 
    context.CreateBookmark("FirstBookmark", OnResumeBookmark); 
    } 

    protected override bool CanInduceIdle 
    { 
    get { return true; } 
    } 

    public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj) 
    { 
    FirstCodeHasExecuted.Set(context, "Yes"); 
    } 
} 

從我的理解,這應該當書籤設置FirstCodeHasExecuted屬性中返回值「是」。

調試時,我可以確認書籤事件已成功解除。

這裏是我的WF4初始化代碼:

var idleEvent = new AutoResetEvent(false); 

var workflowApplication = new WorkflowApplication(new MyWorkFlow()) 
{ 
    Idle = delegate { idleEvent.Set(); }, 

    Completed = delegate(WorkflowApplicationCompletedEventArgs e) 
    { 
    Outputs = e.Outputs; 
    } 
}; 

workflowApplication.Run(); 

idleEvent.WaitOne(); 

workflowApplication.ResumeBookmark("FirstBookmark", "Resume me!"); 

idleEvent.WaitOne(); 

我的問題是,我可以理解爲什麼e.Outputs返回它的字典中沒有任何項目,即使我的屬性被設置在FirstCodeActivity內。

我該怎麼處理這個錯誤?我的第一個想法是,序列作爲不同的上下文運行,因此不包含FirstCodeActivity的輸出。

任何幫助,將不勝感激。

馬特

回答

1

在完成回調的輸出字典包含從執行作爲工作流的一部分工作流程,不活動OutArguments。如果您想查看活動的結果,那麼您需要創建一個工作流程級別的OutArgument,並將FirstCodeHasExecuted綁定到使用VB表達式的那個。

+0

感謝您的回答!這很有道理,雖然我還沒有100%熟悉如何做到這一點,並說我不知道​​VB是輕描淡寫!讓我確認一下,我會接受你的回答! – 2011-05-05 20:13:43

相關問題