我們之前寫工作流宿主程式一般都是直接寫在program.cs檔案裡,這樣復用性比較差。我們就簡單的寫兩個類,這兩個類主要實現的是對workflowinstance和workflowruntime的封裝。我們以後的例子都會使用這兩個類。
[serializable]public
class
private
workflowinstance _workflowinstance;
private
manualresetevent _waithandle
=new
manualresetevent(
false
);private
dictionary
<
string, object
>
_outputparameters
=new
dictionary
<
string
, object
>
();private
exception _exception;
private
string _reasonsuspended
=string.empty;
public
=instance;
}
public
guid id
}
public
dictionary
<
string, object
>
outputparameters
set}
public
manualresetevent waithandle
set}
public
exception exception
set}
public
string reasonsuspended
set}
public
workflowinstance workflowinstance
}
public
void
stopwaiting()
}
2. outputparameters:用來接收工作流的輸出引數,工作流執行時引擎將引發 workflowcompleted事件。
工作流執行時引擎將在workflowcompletedeventargs 中傳入工作流的所有輸出引數。 這些引數包括工作
流的 out 和 ref 引數。第二類是workflowmanager**如下:
public
class
workflowruntimemanager : idisposable
subscribetoevents(instance);
}public
<
string, object
>
parameters)
else
finally
if(rulesreader
!=null)}
return
public
workflowruntime workflowruntime
}
public
dictionary
<
>
workflows
}
public
event
eventhandler
<
workflowlogeventargs
>
messageevent;
public
void
clearworkflow(guid workflowid)
}public
void
clearallworkflows()
private
=null;if
(!=new
return
public
=null;if
(_workflows.containskey(workflowid))
return
result;
}public
void
waitall(int32 msecondstimeout)
waithandle.waitall(handles, msecondstimeout,
false);}
}public
void
dispose()
clearallworkflows();
}private
void
subscribetoevents(workflowruntime runtime)
void
runtime_started(
object
sender, workflowruntimeeventargs e)
void
runtime_stopped(
object
sender, workflowruntimeeventargs e)
void
runtime_workflowcreated(
object
sender, workfloweventargs e)
void
runtime_workflowstarted(
object
sender, workfloweventargs e)
void
runtime_workflowidled(
object
sender, workfloweventargs e)
void
runtime_workflowcompleted(
object
sender, workflowcompletedeventargs e)
}void
runtime_workflowresumed(
object
sender, workfloweventargs e)
void
runtime_workflowpersisted(
object
sender, workfloweventargs e)
void
runtime_workflowloaded(
object
sender, workfloweventargs e)
void
runtime_workflowaborted(
object
sender, workfloweventargs e)
private
void
logstatus(guid instanceid, string msg)
", msg);
}else
- ", instanceid, msg);}//
raise the event
messageevent(
this
, new
workflowlogeventargs(formattedmsg));}}
}
public
class
workflowlogeventargs : eventargs
public
string message
}
下面是測試**:using
(workflowruntimemanager manager
=new
workflowruntimemanager(
newworkflowruntime(
"workflowruntime
")))
;manager.workflowruntime.startruntime();
dictionary
<
string, object
>
wfarguments
=new
dictionary
<
string
, object
>
();wfarguments.add(
"inputstring",
"one"=
manager.startworkflow(
typeof
(sharedworkflows.workflow1), wfarguments);
instance.workflowinstance.terminate(
"manually terminated");
instance.waithandle.waitone(
10000
, false
);foreachif"
result""
result
"]);}if
!=null
)-exception:"if
>0)
-suspended:
"下面執行結果,從該結果可以清晰的看出工作流的執行過程:
堅持學習WF 2 WF創作模式和設計時工具
visual sudio提供了一系列的wf設計工具,這些可以讓你更方便更高效的開發你的工作流應用,主要包括以下幾部分 1.visual studio專案模板 2.視覺化的工作流和活動設計器 3.規則條件設計器 4.工作流偵錯程式 5.命令列編譯工具 wfc.exe 在說這些之前,我們先來說說工作流的...
堅持學習WF 2 WF創作模式和設計時工具
置頂 堅持學習wf文章索引 visual sudio提供了一系列的wf設計工具,這些可以讓你更方便更高效的開發你的工作流應用,主要包括以下幾部分 1.visual studio專案模板 2.視覺化的工作流和活動設計器 3.規則條件設計器 4.工作流偵錯程式 5.命令列編譯工具 wfc.exe 在說這...
arm linux驅動開發學習6
靜態編譯 將驅動原始碼放到kernel核心原始碼所對應的資料夾下面 修改kconfig配置 修改makefile make menuconfig配置圖形介面 生成zimage映象檔案 動態編譯 將驅動檔案編譯成.ko檔案 將test.ko檔案拷貝到 lib module 4.1.15 目錄下 dep...