在活动的属性窗口中有两种类型的属性,一种是在第2节讲到的普通属性,另外一种是事件类型的属性。用户可以通过该属性创建相应的事件,例如:利用Code活动的“ExecuteCode”属性来创建一个事件,开发人员可以在该事件中执行相应的业务操作。在自定义活动中创建事件类型属性与创建普通属性的方法基本相同,也是通过“DependencyProperty”属性来对事件类型的属性进行管理,而它所对应的属性类型不再是“String”或“int”,而是“event”类型的属性,其代码如下所示。
Public static DependencyProperty PrintEvent=DependencyProperty.Register(“Print”,typeof(EventHandler),typeof(Activity1));
[Description(“打印一个字符串”)]
[Browsable(true)]
Public event EventHandler Print
{
add{
base.AddHandler(Activity1.PrintEvent,value);
}
remove
{
base.RemoveHandler(Activity1.PrintEvent,value);
}
}
通过以上步骤就实现了一个事件类型属性的定义,但该属性还不能执行。用户必须重载父类的“Execute”方法,并通过“RaiseEvent”来加载相应“DependencyProperty”属性,其代码如下所示。
Protected override ActivityExecutionStatus Execute(ActivityExecutionContext context)
{
base.RaiseEvent(Activity1.PrintEvent,this,EventArgs.Empty);
return ActivityExecutionStatus.Closed;
}
创建自定义活动
用户可以使用以上代码创建自定义活动,编译成功后将它添加到工作流设计界面中,如图1所示,在属性窗口中通过“Print”属性创建一个可用于执行的事件“ExePrint”,其代码如下所示。
private void ExePrint(object sender,EventArgs e)
{
Console.Write(“自定义活动中定义的方法PrintEvent被执行!\r\n”);
}
图1
运行工作流项目,如图2所示,用户通过属性“Print”创建的事件“ExePrint”被执行
图2