WF4.0实战(十六):模拟红绿灯

简介:

概述:

   在我眼里,每天马路上的红绿灯闪呀闪的,也是一个流程,这个流程是一个反复的流程。这个流程算从红灯开始吧,然后是黄灯,然后是绿灯,然后又是黄灯,接着回到红灯。这个流程是反复的。黄灯是个过度,时间相对较短,红灯和绿灯时间较长,所以,很多人称交通灯为红绿灯,而不是红黄绿灯。这个例子使用WPF和WF模拟交通灯的功能。主要为了说明WPF和WF是如何交互的。先看效果,在讲述一下如何实现,最后总结。

    这个示例的流程为:红灯显示5秒,黄灯显示2秒,绿灯显示5秒 ,黄灯显示2秒,红灯显示5秒。如此反复。

效果:

启动为红灯:

hld1

5秒之后红绿灯变黄

 hld2

2秒之后变绿灯

hld3

5秒之后又变成黄灯,接着2秒之后变红灯,如此来回反复下去

实现篇:

    新建一个wpf应用程序,在MainWindow.xaml中添加下面xaml代码用于模拟红绿灯:

        <Grid>
            <Border Background="AntiqueWhite"
                CornerRadius="10"
                BorderBrush="Gray"
                BorderThickness="2">
                <StackPanel VerticalAlignment="Center" Orientation="Horizontal" >
                    <StackPanel.Resources>
                        <Style TargetType="{x:Type Ellipse}">
                            <Setter Property="Width"
                                Value="100" />
                            <Setter Property="Height"
                                Value="100" />
                            <Setter Property="Fill"
                                Value="LightGray" />
                            <Setter Property="Stroke"
                                Value="Gray" />
                            <Setter Property="StrokeThickness"
                                Value="2" />
                            <Setter Property="Margin"
                                Value="4" />
                        </Style>
                    </StackPanel.Resources>

                    <Ellipse  Fill="{Binding variable1, UpdateSourceTrigger=PropertyChanged}"  />
                    <Ellipse  Fill="{Binding variable2, UpdateSourceTrigger=PropertyChanged}" />
                    <Ellipse   Fill="{Binding variable3, UpdateSourceTrigger=PropertyChanged}" />
                </StackPanel>
            </Border>
        </Grid>

定义流程:

    定义三个变量variable1、variable2、variable3表示三种灯的颜色。流程的一部分,初始值variable1为红色,variable2、variable3为灰色。“更新为红色灯”活动用于更新WPF应用程序中的一个绑定属性,Delay用于暂停流程,延时5秒

hld5

在MainWindow中添加个属性:

  WorkflowDataContext _workflowContext;
        public WorkflowDataContext WorkflowContext
        {
            get { return _workflowContext; }
            set
            {
                this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                    (Action)delegate() { this.DataContext = value; });

                _workflowContext = value;
            }

        }

WorkflowContext就是流程中需要更新的属性。

在构造函数中添加启动流程的代码:

            _application1 = new WorkflowApplication(new Activity1());
            _application1.Completed = (workflowApplicationCompletedEventArgs) =>
            {
                this.Dispatcher.Invoke(DispatcherPriority.Normal,
                    (Action)delegate()
                    {
                        this.DataContext = null;
                        _isWorkflowStarted = false;
                    }
                        );

            };

            _application1.Extensions.Add(this);
            _application1.Run();
            _isWorkflowStarted = true;

 

 

 

 

如果窗体关闭的时候,流程还没有结束,在窗体关闭事件中添加下面代码:

        private void Window_Closed(object sender, EventArgs e)
        {
            if (_application1 != null && _isWorkflowStarted == true)
                _application1.Terminate("Main Window closed");
        }

总结:

    这个例子很简单,主要是为了说明WPF和WF的另一种交互方式。本系列前面也提出了一种WPF和WF交互的方式:WF4.0实战(六):控制WPF动画,这个例子中wpf应用程序通过WF的扩展的方式将WPF窗体传递给流程的,方式为:

_application1.Extensions.Add(this);





本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/05/18/TrafficLight.html,如需转载请自行联系原作者

相关文章
|
7月前
|
存储 安全 测试技术
零基础必看!Win10系统重装图文详解+安全下载链接,避坑神器
本教程详细介绍了重装Win10系统的完整流程,包括准备工作、制作启动盘、BIOS设置、系统安装、驱动安装与优化以及常见问题解决。准备工作中需确保U盘容量、下载官方镜像并备份重要数据;通过微PE工具箱制作启动盘;调整BIOS设置以支持U盘启动;使用DiskGenius分区并借助WinNTSetup加载镜像完成安装;最后优化系统性能并解决可能的故障,确保安装顺利进行。
|
算法 API C++
使用C++进行系统级编程的深入探索
【5月更文挑战第23天】本文探讨了C++在系统级编程中的应用,强调其接近底层、高性能、可移植性和面向对象编程的优势。关键技术和最佳实践包括:内存管理(智能指针和RAII原则)、多线程(std::thread和同步原语)、系统调用与API、以及设备驱动和内核编程。编写清晰代码、注重性能、确保安全稳定及利用开源库是成功系统级编程的关键。
|
机器学习/深度学习 监控 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析、数学模型及Python代码
2024年中国研究生数学建模竞赛E题要求建立高速公路应急车道紧急启用模型,以缓解特定路段的拥堵问题。题目提供了四个视频观测点的数据,需分析交通流参数随时间的变化规律,建立拥堵预警模型,并验证模型有效性。此外,还需设计合理的应急车道启用规则和算法,优化视频监控点布局,以提升决策科学性和成本效益。涉及视频数据处理、非线性动态系统建模和机器学习等技术。适合交通工程、数学、计算机科学等多个专业学生参与。需利用Python等工具进行数据处理和建模。具体问题包括统计参数变化、建立拥堵模型、验证模型有效性、设计启用规则和优化监控点布局。
1509 12
【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析、数学模型及Python代码
|
Python Windows
ImportError: No module named ‘encodings’
ImportError: No module named ‘encodings’
1268 0
|
开发者 C# 自然语言处理
WPF开发者必读:掌握多语言应用程序开发秘籍,带你玩转WPF国际化支持!
【8月更文挑战第31天】随着全球化的加速,开发多语言应用程序成为趋势。WPF作为一种强大的图形界面技术,提供了优秀的国际化支持,包括资源文件存储、本地化处理及用户界面元素本地化。本文将介绍WPF国际化的实现方法,通过示例代码展示如何创建和绑定资源文件,并设置应用程序语言环境,帮助开发者轻松实现多语言应用开发,满足不同地区用户的需求。
303 0
|
数据可视化 数据安全/隐私保护 开发者
堪称最优秀的Docker可视化管理工具——Portainer深度解析与应用实践
【8月更文挑战第7天】在容器化技术日益盛行的今天,Docker以其轻量级、可移植性和灵活性的优势,成为了开发者和管理员的首选。然而,随着Docker容器的增多,如何高效地管理和监控这些容器成为了一个挑战。Portainer,作为一款开源的Docker可视化管理工具,凭借其直观的操作界面和强大的功能,赢得了广泛的赞誉。今天,我们就来深入探讨Portainer的使用技巧,看看你是否真的会用它。
507 0
|
C# 开发者 Windows
WPF与PDF文档:解锁创建和编辑PDF文件的新技能——从环境配置到代码实践,手把手教你如何在WPF应用中高效处理PDF,提升文档管理效率
【8月更文挑战第31天】随着数字文档的普及,PDF因跨平台兼容性和高保真度成为重要格式。WPF虽不直接支持PDF处理,但借助第三方库(如iTextSharp)可在WPF应用中实现PDF的创建与编辑。本文通过具体案例和示例代码,详细介绍了如何在WPF中集成PDF库,并展示了从设计用户界面到实现PDF创建与编辑的完整流程。不仅包括创建新文档的基本步骤,还涉及在现有PDF中添加页眉页脚等高级功能。通过这些示例,WPF开发者可以更好地掌握PDF处理技术,提升应用程序的功能性和实用性。
647 0
|
算法 安全 架构师
浅浅瞅瞅RSA-PSS 算法
浅浅瞅瞅RSA-PSS 算法
653 0
|
C# Windows
WPF技术之Border控件
WPF(Windows Presentation Foundation)的Border控件用于创建一个可视的边框,可以将其他控件包裹在内。
866 0
WPF技术之Border控件
|
C# 虚拟化 开发者
WPF技术之ListBox控件
WPF ListBox控件是一种用于显示和选择多个项的常用控件。它可以展示任意类型的数据,并允许用户通过鼠标或键盘进行选择操作
1465 0