堅持學習WF 6 開發可復用的宿主程式

2021-08-29 13:22:22 字數 4652 閱讀 5632

我們之前寫工作流宿主程式一般都是直接寫在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...