Hello World ,向前辈致敬!
该篇作为WWF_designer部份的正式开篇文章
本例中,将在一个XML文件中设计工作流,让引擎用该XML文件创建并运行实例
第一步,新建一个名为[控件]的空项目,添加一个Activity项

第二步,简单的添加点东西,演示吗,加点什么随便

代码如下

Public Class Activity1Class Activity1
Inherits SequenceActivity

Public Sub New()Sub New()
MyBase.New()
InitializeComponent()
End Sub

Public Shared 自定义属性Property As DependencyProperty = DependencyProperty.Register("自定义属性", GetType(System.String), GetType(Activity1))

<DescriptionAttribute("这是一个自定义属性")> _
<DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)> _
<BrowsableAttribute(True)> _

Public Property 自定义属性()Property 自定义属性() As String
Get
Return CType(MyBase.GetValue(自定义属性Property), String)
End Get
Set(ByVal value As String)
MyBase.SetValue(自定义属性Property, value)
End Set
End Property


Private Sub codeActivity1_ExecuteCode()Sub codeActivity1_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
Console.WriteLine("hello world (^_^)")
Console.WriteLine(自定义属性)
End Sub
End Class

第三步,编译,然后关闭项目,生成的[控件.DLL]文件放到一旁备用
再新建一个控制台项目[宿主],代码如下
Imports System
Imports System.ComponentModel.Design.Serialization
Imports System.Threading
Imports System.Workflow.Activities
Imports System.Workflow.ComponentModel.Compiler
Imports System.Workflow.ComponentModel.Serialization
Imports System.Workflow.Runtime
Imports System.Xml


Public Class Class1Class Class1
Shared WaitHandle As New AutoResetEvent(False)


Shared Sub Main()Sub Main()
Dim 文件 As String = "workflow.xml"

Dim 引擎 As New WorkflowRuntime()
AddHandler 引擎.WorkflowCompleted, AddressOf OnWorkflowCompleted
AddHandler 引擎.WorkflowTerminated, AddressOf OnWorkflowTerminated

引擎.StartRuntime()

Dim 实例 As WorkflowInstance = Nothing
Try
Dim 读取对象 As XmlReader = XmlReader.Create(文件)
实例 = 引擎.CreateWorkflow(读取对象)

读取对象.Close()

Catch 异常 As WorkflowValidationFailedException
Dim 错误列表 As ValidationErrorCollection = 异常.Errors

For Each temp As ValidationError In 错误列表
Console.WriteLine(temp.ErrorText)
Next
Console.Read()
Return
End Try


Console.WriteLine("准备启动流程")

实例.Start()

WaitHandle.WaitOne()

Console.Read()
End Sub


Shared Sub OnWorkflowCompleted()Sub OnWorkflowCompleted(ByVal sender As Object, ByVal e As WorkflowCompletedEventArgs)
Console.WriteLine("工作流完成")
WaitHandle.Set()
End Sub


Shared Sub OnWorkflowTerminated()Sub OnWorkflowTerminated(ByVal sender As Object, ByVal e As WorkflowTerminatedEventArgs)
Console.WriteLine("运行出错:" + e.Exception.Message)
WaitHandle.Set()
End Sub

End Class

编译,生成[宿主.exe]文件,然后关闭项目
将[控件.DLL]文件复制到上步生成的[宿主.exe]文件所在的目录,
在该目当中新建一个XML文件[workflow.xml]
<?xml version="1.0" encoding="utf-8"?><SequentialWorkflowActivity x:Name="wxwinter" Description="一个控件" xmlns:ns0="clr-namespace:控件;Assembly=控件, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
<ns0:Activity1 x:Name="wxd1" 自定义属性="wf是一个不错的工作流平台" />
</SequentialWorkflowActivity>
运行[宿主.exe]文件

修改[workflow.xml]
<?xml version="1.0" encoding="utf-8"?><SequentialWorkflowActivity x:Name="wxwinter" Description="一个控件" xmlns:ns0="clr-namespace:控件;Assembly=控件, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/workflow">
<ns0:Activity1 x:Name="wxd1" 自定义属性="wf是一个不错的工作流平台" />
<ns0:Activity1 x:Name="wxd2" 自定义属性="功能很强大" />
<ns0:Activity1 x:Name="wxd3" 自定义属性="不知何时能出正式版" />
<ns0:Activity1 x:Name="wxd4" 自定义属性="也许还得等十年" />
</SequentialWorkflowActivity>
运行[宿主.exe]文件

代码下载 一个例子(Hello World).rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)