WF4.0 Beta1之旅(4):Bookmark的使用

相关文章:

WF4.0 Beta1之旅(1):基本介绍
WF4.0 Beta1之旅(2):异常处理
WF4.0 Beta1之旅(3):全新的FlowChart

WF4.0中加入了书签(Bookmark)机制,可以让活动在书签的位置挂起,等待恢复。如果我们需要在活动没有完成的时候,提供额外的数据,这个时候我
们就可以给活动注册一个书签,我们需要使用CreateNamedBookmark方法创建书签,该方法有三个参数一个名字,一个BookmarkCallback的委托,当
活动恢复的时候执行。和BookmarkOptions,Runtime为每个工作流实例维护一个Bookmarks的Table,每次有Bookmark要恢复的时候都回去check。

1.下面我们就创建一个这样的自定义活动,Read.cs,代码如下:

using System;
using System.Activities;

public sealed class Read<T> : NativeActivity<T>
{
    public Read() : base()
    {
    }
    public string BookmarkName { get; set; }

    protected override void Execute(ActivityExecutionContext context)
    {
        context.CreateNamedBookmark(this.BookmarkName, new BookmarkCallback(this.Continue));
    }

    void Continue(ActivityExecutionContext context, Bookmark bookmark, object obj)
    {
        this.Result.Set(context, (T)obj);
    }
}

2.设计工作流

工作流中包含一个Parallel和一个WriteLine,工作流中的变量如下:

Name:x type:String scope:Sequence

Name:y type:String scope:Sequence

Bookmark1

Parallel中有两个Read活动,两个read活动的BookmarkName属性为x,y。Result属性也为x,y

Bookmark2

3.宿主程序如下:

namespace Bookmarks
{
    using System;
    using System.Linq;
    using System.Threading;
    using System.Activities;
    using System.Activities.Statements;
    using System.Collections;

    class Program
    {
        static void Main(string[] args)
        {
            ManualResetEvent completionEvent = new ManualResetEvent(false);
            AutoResetEvent idleEvent = new AutoResetEvent(false);

            WorkflowInstance instance = new WorkflowInstance(new Sequence1());
            instance.OnIdle += delegate
            {
                idleEvent.Set();
                return IdleAction.Nothing;
            };
            instance.OnCompleted += delegate
            {
                completionEvent.Set();
            };

            instance.Run();

            bool lastBookmark = false;
            while (!lastBookmark)
            {
                idleEvent.WaitOne();

                IList bookmarks = instance.GetAllBookmarks();
                if (bookmarks == null || bookmarks.Count == 0)
                {
                    break;
                }

                lastBookmark = (bookmarks.Count == 1);

                while (true)
                {
                    Console.Write("Bookmarks:");
                    foreach (BookmarkInfo info in bookmarks)
                    {
                        Console.Write(" '" + info.BookmarkName + "'");
                    }
                    Console.WriteLine();
                    Console.WriteLine("输入要恢复的书签名");
                    string name = Console.ReadLine();
                    Console.WriteLine("输入传入的数据 '{0}'", name);
                    string str = Console.ReadLine();

                    try
                    {
                        instance.ResumeBookmark(name, str);
                        break;
                    }
                    catch (BookmarkNotFoundException e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }

            completionEvent.WaitOne();
            Console.WriteLine("Press enter to exit");
            Console.ReadLine();
        }
    }
}

通过 IList bookmarks = instance.GetAllBookmarks();获得所有书签。

通过instance.ResumeBookmark(name, str);恢复活动的执行。

4.结果如下:

Bookmark3

2026.06.15+细节判断+郭熙+(笔记)(郭熙言语高分“十二计”).pdf 立即下载

相关推荐

高校技术转移办公室人员在推进成果转化时,如何快速识别高质量专利?.docx

高校技术转移办公室人员在推进成果转化时,如何快速识别高质量专利?

WF4.0 基础篇 (十七) Bookmark

本节主要介绍WF4中无返回值Bookmark与有返回值Bookmark,以及Bookmark在parallel,ParallelForEach,ForEach中的使用.   本文例子下载: http://files.cnblogs.com/foundation/BookmarkSample.rar 本文例子说明 Bookmark Bookm

heshengfen123的专栏 2504

政府科技管理者如何推动高校科研成果精准对接产业需求?.docx

政府科技管理者如何推动高校科研成果精准对接产业需求?

WF4Bookmark

Bookmark与CodeActivity的区别当工作流运行至Bookmark时,Bookmark会让工作流在此处挂起(Idel),是线程挂起,如果是Web请求处理程序执行,将不会返回,等待恢复。而Code不会挂起;Code继承自CodeActivity,而Bookmark需继承自NativeActivity;设计一个bookmark1.csusing System; using System.A...

tulandsoft的专栏 392

Python全栈入门实战:FastAPI+工单台账+Excel导出(含教学手册与源码骨架)

原创教学资源包(VIP专属)。围绕 Python 全栈入门搭建可复现闭环:用 FastAPI 提供工单台账接口,SQLite 落库,原生 HTML/JS 页面完成列表、新增与筛选,再用 openpyxl 导出带中文表头的 Excel。内含中文实战手册与可运行源码骨架,实现均为教学桩,注释标明鉴权、迁移、并发与备份等生产注意点。使用方法:解压后进入 src/ 目录,建议 Python 3.11+ 创建虚拟环境并安装 requirements.txt;先运行 python smoke_test.py 验证创建、列表、更新与导出,再执行 uvicorn app.main:app --reload --host 127.0.0.1 --port 8000,浏览器打开 http://127.0.0.1:8000 即可操作工单并下载 Excel。细节见手册.md 与 src/README_SRC.txt。适合作为成长任务「Python全栈开发资源包」的自制合规 VIP 资源上传。建议售价 9.90 元。数据均为虚构示例,不含刷量、搬运或真实个人信息。

交错并联图腾柱PFC变换器仿真设计(Simulink仿真实现)

内容概要:本文档围绕“交错并联图腾柱PFC变换器”的Simulink仿真实现展开,系统阐述了该高效率功率因数校正(PFC)拓扑的建模、控制策略设计与仿真验证全过程。作为适用于中大功率场合的先进PFC结构,交错并联图腾柱通过降低输入电流纹波、提高功率密度和系统效率,展现出显著优势。文档详细介绍了系统总体架构、主电路参数设计、双闭环控制策略(包括电压外环与电流内环)、PWM调制技术、软启动机制以及仿真结果分析等内容,帮助读者掌握从理论分析到仿真实践的完整开发流程。同时,文档还引入与其他主流变换器拓扑(如LLC、DAB、Vienna整流器等)的对比分析与协同应用场景探讨,体现了其在现代电力电子系统集成化发展中的重要地位。; 适合人群:具备电力电子技术基础知识、熟悉Simulink/Matlab仿真环境,从事电源系统设计、新能源变换器研发等相关工作的研究生、工程师及科研人员(建议具有1年以上相关实践经验)。; 使用场景及目标:① 深入理解交错并联图腾柱PFC变换器的工作原理与高性能控制方法;② 掌握基于Simulink的PFC系统建模与闭环控制器设计流程;③ 通过仿真数据分析系统动态响应与稳态性能,优化控制参数;④ 为后续硬件原型开发提供可靠的理论依据与前期验证手段。; 阅读建议:建议结合文档配套的Simulink仿真模型进行逐步操作,重点聚焦于双闭环控制结构设计与PI参数整定环节,深入理解各模块间的耦合关系。同时,可参考文中提及的Vienna、LLC等其他典型拓扑,开展横向对比研究,全面把握不同类型PFC架构的技术特点与适用边界。对于初学者,建议先夯实Buck/Boost电路基础与PWM控制原理,再进入本主题的深入学习。

Python环境避坑指南:从零在Win10/Win11上跑通Lama Cleaner(解决ffmpy等模块安装失败)

本文详细介绍了在Win10/Win11系统上从零配置Python环境并成功运行Lama Cleaner的完整指南。针对ffmpy等模块安装失败问题,提供了Python版本选择、依赖安装技巧、模型文件预下载及启动参数优化等实用解决方案,帮助开发者高效部署这一AI工具。

ajwqb06628的专栏 537

产业园区运营负责人如何利用AI技术精准识别和推荐适合的科技成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

WF4.0 Beta1之旅(7):WF调用PowerShell

在WF4 beta1中与PowerShell交互提供了两个活动InvokePowerShell和InvokePowerShell<T>活动 InvokePowerShell:调用一个不包含返回值的PowerShell cmdlet。InvokePowerShell可以用来调用简单的cmdlets和脚本。我们还可以向cmdlet传递参数和输入对...

weixin_34119545的博客 153

储能双向Buck-Boost+模型预测电流控制+电压下垂控制仿真【附参考文献】(Simulink仿真实现)

内容概要:本文详细介绍了基于Simulink平台构建的储能双向Buck-Boost变换器仿真模型,融合模型预测电流控制(MPC)与电压下垂控制策略,旨在精确模拟和优化储能系统在充放电过程中的能量双向流动特性。该模型完整实现了电流内环的模型预测控制,以提升动态响应速度与控制精度,并结合电压外环的下垂控制机制,有效模拟微电网中多储能单元间的功率自主分配行为,增强系统的冗余性与可扩展性。控制架构设计严谨,兼顾瞬态响应与稳态性能,适用于复杂工况下的系统稳定性分析。文档配套提供参考文献,强化了技术方案的理论支撑与学术可信度,为电力电子与新能源系统领域的研究提供了高质量的仿真验证平台。; 适合人群:面向具备电力电子、自动控制理论或新能源系统等相关专业背景,且正在从事科研或工程开发工作的技术人员,尤其适合熟悉Simulink仿真环境的研究生、电气工程师及高校教师。; 使用场景及目标:①研究储能系统在频繁充放电切换过程中的动态稳定性与响应特性;②验证模型预测控制在高动态电力变换器中的控制性能与鲁棒性;③实现多储能单元并联运行下的下垂控制策略,优化系统功率均分能力;④为微电网、直流配电系统及分布式能源系统提供核心控制算法的仿真验证与优化平台。; 阅读建议:建议读者结合所提供的参考文献深入理解控制策略的数学建模与理论推导,同时在Simulink环境中动手复现模型,重点调试模型预测控制的代价函数权重、预测时域以及下垂控制系数等关键参数,观察其对系统性能的影响,并可进一步拓展至多变换器并联、故障穿越、通信延迟等复杂场景的仿真研究。

科技中介服务机构如何借助AI技术降低服务门槛并提升客户粘性.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

WF4.0 Beta1 流程设计器与Activity Designer

WF4.0 Beta1 流程设计器与Activity Designer 数据类 public class myData { public string 结果 { set; get; }   public string 说明 { set; get; } }    自定义Activity p...

weixin_33985679的博客 243

ArcGIS属性表汉字转拼音

接着我安装了一个编辑器“PyCharm Community Edition 2019.3.3\bin\pycharm64.exe”,在里面添加“pypinyin”包,然后将其设置为arcgis的编辑器和调试程序,还是失败;我在10.6的机器上折腾了上面几步,直到两周后脚本突然运行成功,我也不确定是哪一步导致pypinyin包配置成功,因此将心得体会写出来,如果过一段时间,打开10.2的机器运行脚本成功了,再写后续.......,按照“配置方法1:”进行尝试,显示配置失败。

2301_77413856的博客 1295

WF4.0 Beta1之旅(6):自定义活动

一:程序集,命名空间,活动变化 WF4并非是在原有WF3.x上的改进,而是全新的开发有新的命名空间,程序集,原WF3的部分会继续保留这主要是为了兼容,下面的表格告诉你具体的变化: 1.程序集的变化 WF3.x程序集 WF4程序集 System.Workflow.Activities.dll System.Activities.dll System.Workflow.ComponentM...

fdqwfdsafdsa的博客 218

WinForm实战:如何用C#和PdfiumViewer打造一个功能齐全的PDF阅读器(含源码)

本文详细介绍了如何使用C#和PdfiumViewer库从零开始构建一个功能齐全的WinForm PDF阅读器。内容涵盖项目环境搭建、核心组件解析、基于命令模式的工具栏与UI架构设计,并深入讲解了智能缩放、页面导航、打印功能等核心交互的实现,以及内存管理和性能优化等高级话题,为开发者提供了一套完整的实战解决方案。

docker8compose的博客 503

Linux 使用rm -rf /*命令后,恢复系统方法

Linux 使用rm -rf /*命令后,恢复系统方法 个人学习记录 这里实验环境采用的是radhel7.1的版本: 个人认为核心就是缺失什么组件,就从别的地方复制什么组件过来,先把系统拉起来,再慢慢恢复配置 进入救援模式 1、将/dev/sda两个分区分别挂载看看,里面的内容,有内容的就是根存在的分区 2、ifconfig eno16777777 192.168.8.2 3、从另外一台一样系统的根 。用 tar打包,一个个文件夹拷贝过来 4、到坏系统,scp另外一个系统的etc.tar.gz 5

weixin_43603476的博客 1万+

WF4.0 Beta1 自定义持久化PersistenceProvider

 WF4.0 Beta1 自定义持久化PersistenceProvider 文件持久化类 public class myFilePersistenceProvider : PersistenceProvider { string fileName;   public myFilePersistenceProvider(string ...

weixin_34235105的博客 163

百度飞桨+文心大模型实战:生成式AI工程师认证备考全攻略(含真题解析)

本文详细解析百度飞桨与文心大模型结合的生成式AI工程师认证备考策略,涵盖认证体系、学习路径、核心技能突破及真题分析。帮助开发者掌握大模型原理、飞桨平台操作和文心大模型应用,高效通过工信部与百度联合认证考试。

loss4bartender的博客 683

一点一点学习WF4.0 Bate2(1)---Pick

开始学习WF4.0 Bate2了,今天开始学基础活动 Pick 摘要:本文主要介绍如何使用Pick 首先创建新的WorkflowConsoleApplication. 1添加类ReadString,实现代码如下: CodepublicclassReadString:NativeActivity<string>{[RequiredArgument...

weixin_30836759的博客 81

利用GPAC生成MP4文件

GPAC主要针对学生和内容创作者,代表了一个跨平台的多媒体框架,开发人员可以使用它在 LGPL 许可下制作开源媒体。GPAC多媒体框架兼容范围广泛的流行文件类型,从常见格式(如 AVI、MPEG 和 MOV)到复杂格式(如 MPEG-4 系统或 VRML/X3D)和 360 电影。

深之JohnChen的专栏 1771

芒果YOLO11改进44:主干Backbone篇之MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

包括YOLOv5、YOLOv7、YOLOv8等模型改进 371
上一篇: WF4.0 Beta1之旅(3):全新的FlowChart
下一篇: WF4.0 Beta1之旅(5):规则引擎的变化
fdqwfdsafdsa
博客等级 码龄18年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值