.Net Framework

C#状态机Stateless

不羁的心 提交于 2020-08-15 16:53:34
最近在折腾一些控制相关的软件设计,想起来状态机这个东西,对解决一些控制系统状态切换还是挺有用的。 状态机(有限状态自动机)网上有很多 介绍 。简单理解就是定义一系列状态,通过一系列的事件,可以使得状态可以相互之间切换。 如果不使用状态机的思想来编程,那么针对过程的编程方法会使得程序拓展性变差,并且不容易调试。而状态机只需要定义好了各种状态和状态切换之间的事件,你只管触发事件,剩下的事情它自己就自动完成了(毕竟名称叫做有限状态自动机),这对于很多需要定义各种控制阶段的系统简直是完美适配。了解到.NET也有很多库可以实现这些功能,本文主要介绍一下Stateless的应用。 Stateless介绍 Stateless 可以创建极简的状态机与对应的工作流。很多项目(包括VisualStudio Extension、AIlab)都有使用到它。 它支持以下特性: 支持各种类型作为状态和触发事件 支持状态继承 支持状态进入/离开事件 支持条件状态转移 支持状态/转移查询 也有几点需要注意的: 它支持异步语法,但是它是单线程的,不是线程安全的。 可以导出DOT graph 安装起来很简单,直接在nuget中安装即可: Install-Package Stateless Stateless使用 用起来也挺简单的,以打电话这个事情为例,针对打电话的种种动作和状态做成一个状态机。

MFC图形编辑界面工具

房东的猫 提交于 2020-08-15 16:50:41
//2020年6月17 更新 这篇博客最近好像挺火?不少师弟师妹咨询我MFC的内容,额,博主很久也没有用MFC搞事情了,现在甚至都没有开发环境,加上到期末了,事情很多,实在没有精力回顾帮大家解决问题,今年这种情况特殊,我也很能理解18级的师弟师妹们,教授实训课的应该还是张帆老师吧,很好的老师,可以多向他请教,B站好像也有相关的教程,方法总比困难多,加油! 一、背景 喔,五天的实训终于结束了,学校安排的这次实训课名称叫高级程序设计实训,但在我看来,主要是学习了Visual C++ .NET所提供的MFC(Microsoft Foundation Class)库所提供的类及其功能函数的使用。写这一篇博客的目的是针对实训中出现的问题做一些说明,方便以后查看,并且对这次实训做一些总结。这一次的实训对我来说其实挺难受的,真正用来学习使用VS和MFC的时间只有三天,加上下个周是考试周,还有几门课没有复习完,这几天基本上是连轴转,中午也泡在实验室里,唉啊还是自己太菜了。最后我们需要提交一个课程设计程序,因为时间的原因,我选择了最简单的图形界面编辑工具,这个程序其实在C++的课程设计上就有这个,但当时我还不会windows图形界面的编程,现在想想这两个课程设计其实完全可以是一份(捂脸)。 最后做出来的界面是这样的: 在功能上: 能够在 windows 的界面下画图,能够画直线、空心矩形、、圆角矩形

dotnet 使用 ClearScript 执行 VBScript 和 JS 代码 无需浏览器

丶灬走出姿态 提交于 2020-08-15 16:45:01
小伙伴都知道,使用 JS 的坑在于执行效率过低,速度过慢。如果是在客户端中,还开启一个浏览器,整个应用程序就会特别重。有没有什么方法可以让 dotnet 作为容器,执行 JScript 代码而不需要浏览器?其实有的,因为 VBScript 和 JS 代码都很好解析,所以有 ClearScript 支持使用 dotnet 解析代码执行 如何将 VBScript 和 JS 代码编译为 IL 或如何在 C# 和 dotnet 中嵌入 js 代码是不靠谱的,因为 js 语言设计如此,是用来在 基组模块 层运行的语言,也就是这是一个解析型的脚本,更好地做法是给他实现一个解析库。通过解析库将代码解析为数据,在根据数据调用已经写好的代码,这样就能实现在 dotnet 中运行 js 代码了。实现这个方式有两个不同方法,第一个方法使用的最多的,就是在 dotnet 中添加一个浏览器让他执行代码,这个方法的缺点就是性能特别渣,无论是内存占用或 CPU 占用都是特别渣。我作为性能优化组的逗比,只能去寻找第二条路径,毕竟需要照顾一些只会写 js 的大佬。第二个方法是通过 dotnet 解析器解析 js 代码的方法,推荐使用 ClearScript 库,这个库十分好用,可以给 js 注入执行的类或实例包括库,这样可以让贫瘠的 js 可以用到更多的 dotnet 的强大的库。同时可以杂私货,注入自己实现的类等

ribbon-loadbalancer 负载均衡单独使用

て烟熏妆下的殇ゞ 提交于 2020-08-15 16:33:00
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.mycompany.ribbon.test ; import com.google.common.collect.Lists ; import com.netflix.client.DefaultLoadBalancerRetryHandler ; import com.netflix.client.RetryHandler ; import com.netflix.loadbalancer.* ; import com.netflix.loadbalancer.reactive.LoadBalancerCommand ; import com.netflix.loadbalancer.reactive.ServerOperation ; import rx.Observable ; import java.net.HttpURLConnection ; import java.net.URL ;

多种方式创建 Entity Framework Core 上下文

为君一笑 提交于 2020-08-15 15:49:43
原文: 多种方式创建 Entity Framework Core 上下文 作者 | 喵叔 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 我们在利用 Entity Framework Core 创建上下文实例的时候往往都是调用构造函数并重载 OnConfiguring 方法,这是 Entity Framework Core 默认的常用的创建上下文实例的方式。除了这种方式,微软也为我们准备了其他两种创建上下文实例的方式。算上常用的方式微软一共提供了三种创建上下文实例的方式,分别是: 直接调用上下文无参构造函数并重载 OnConfiguring 方法; 继承自上下文基类 DbContext 并传递 DbContextOptions 到上下文构造函数中; 使用依赖注入创建上下文实例。 上述三种方式总结起来就是两种创建上下文实例的方式,分别是 显示创建 和 通过依赖注入容器创建 。下面我分别来讲解这两种创建上下文实例的方式。 显示创建上下文实例 显示创建上下文实例是 Entity Framework Core 中常用的方式,当我们不需要通过依赖注入方式创建上下文实例的话就可以通过这种方式创建。 显示创建上下文实例最简单的方法是通过创建一个派生自 DbContext 的类,并且调用它的无参构造函数。代码如下: public class EFContext : DbContext

FreeSql 与 SqlSugar 性能测试(增EFCore测试结果)

爷,独闯天下 提交于 2020-08-15 15:45:27
这篇文章受大家邀请,与 SqlSugar 做一次简单的性能测试对比。主要针对插入、批量插入、批量更新、读取性能的测试; 测试环境 .net core 2.2 FreeSql 0.3.17 sqlSugarCore 4.9.9.3 sqlserver 14.00.1000 Express、mysql 5.6 测试项目 以 console 程序,创建步骤: 1、dotnet new console 2、dotnet add package FreeSql 3、dotnet add package sqlSugarCore 编码的过程 这个错误来自 sugar 创建数据库的时候,实体定义如下: sugar的没有同步上来。 暂时先用 freesql 帮 sugar 创建了表。。。创建完后如下: 运行时又出现如下错误: 需要加一堆 IsIgnore 是的,还在报错,最终原因是我传入的 songs 是 IEnumerable ,然后接受的参数类型正常应该是 Song[],希望作者看到了可以改进。 以 SqlServer 作为目标库,测试结果 第一次: 第二次: EFCore 也参与进来的测试: uploading-image-353246.png 以 MySql 作为目标库,测试结果 EFCore 也参与进来的测试: 结束语 然而上面提到的批量更新,今天先到这吧。下次有兴致了再测试。

旧 WCF 项目迁移到 asp.net core + gRPC 的尝试

删除回忆录丶 提交于 2020-08-15 15:42:59
一个月前,公司的运行WCF的windows服务器down掉了,由于 AWS 没有通知,没有能 第一时间 发现问题。 所以,客户提出将WCF服务由C#改为JAVA,在Linux上面运行;一方面,AWS对Linux有较多的监控措施,另一方面,假如出现问题,可以设置自动重启等服务。 老旧的WCF服务 目前WCF服务,主要提供windows桌面软件的 数据接口 ,应该有五六年的历史了。我进入公司后,WCF服务的代码,一直由我一个人来维护。存在很多 历史遗留问题 ,也有 不同版本 的共存。 如果java重写的话,其中的业务逻辑代码,难免会出现各种各样的bug,增加开发和测试的工作量。听说,要移植到linux服务上后,第一时间想到的就是 跨平台 的 .net core 。 .net core 经过了四年的发展,到目前的 3.1 LST版本,已经是 非常成熟 的跨平台解决方案了。 之后,我就在网上查找,有没有WCF的.net core 版本,查询到的信息总结如下: Core WCF不打算做WCF到.NET Core的100%兼容的移植; 对于新应用程序,WCF这种SOAP技术不建议使用; 对于老的应用程序,建议将这些保留在.NET Framework上; 如果您真的想将一个旧的应用程序迁移到.NET Core并且想继续使用WCF和WF, 社区的开源项目也是可以的

如何使用甘特图图层和筛选器

China☆狼群 提交于 2020-08-15 15:32:00
甘特图(Xgantt) 从1998年的第一个商用版本开始就致力于计划编制和项目管理方面控件的研究和开发,经过20多年的积累和沉淀,目前可为软件开发商和最终用户提供最顶级的计划编制和项目管理的控件产品,帮助用户快速的整合项目管理软件所需的甘特图,网络图,资源柱状图,日程日历,资源调度等功能模块,并提供全方位的支持和服务。 VARCHART XGantt 是一款功能强大的甘特图控件,其模块化的设计让您可以创建满足需要的应用程序。XGantt可用于.NET,ActiveX和ASP.NET应用程序,可以快速、简单地集成到您的应用程序中,帮助您识别性能瓶颈、避免延迟以及高效利用资源,使复杂数据变得更加容易理解。 您是否了解我们如何使用VARCHART XGantt开发功能强大的可视化计划应用程序的系列?如果按照所有步骤进行操作,那么现在您将拥有一个相当全面的Gantt应用程序:您已经安装了我们的.NET Gantt控件,已经开始使用示例库,已经将数据加载到了控件中,您知道如何更改时间单位并修改时间范围,并可能通过创建组来构造甘特图 (如上一篇博客文章中所述) 。 使用图层 图层是一对日期的图形表示。此外,同一对日期可以通过多个图层显示。逻辑上,不同的层堆叠成一堆。 在我们的示例中,我们现在将创建另一个外观不同的图层。 1.在“ 对象”属性页上,选择“ 图层...”。将弹出“ 指定条形外观

.NET 5 尝鲜

久未见 提交于 2020-08-15 14:32:52
.NET 5 尝鲜 - 开源项目TerminalMACS WPF管理端支持.NET 5 一个使用 Prism 作为模块化框架、基于多个开源控件库作为UI控件选择、集成开源 UI 界面设计的 .NET 5 WPF 客户端项目。 项目名称:TerminalMACS WPF管理端 项目开源地址: Github: https://github.com/dotnet9/TerminalMACS.ManagerForWPF Gitee: https://gitee.com/dotnet9/TerminalMACS.ManagerForWPF 作者:Dotnet9 1. 特性 使用 .NET 5 开发,体验最新 .NET 平台(和 .NET Core 3.1 无缝兼容) .NET 5 是 .NET Framework 和 .NET Core 的未来,最终将成为一个统一平台,.NET5将包含ASP.NET核心、实体框架核心、WinForms、WPF、Xamarin 和 ML.NET。 基于 Prism 8 搭建模块化框架,方便程序扩展 Prism为程序设计提供指导,旨在帮助用户更加容易的设计和构建丰富、灵活、易于维护WPF桌面应用程序。Prism使用设计模式(如MVVM,复合视图,事件聚合器),帮助你创建一个松耦合的程序。遵循这些设计模式原则,将目标程序解耦成独立的模块

GNS3集成的VPCS详细解读(命令行,参数)

梦想的初衷 提交于 2020-08-15 14:03:10
VPCS(Virtual PC Simulator)与GNS3是天作之合。 VPCS可以模拟多达9台PC,当你在Dynamips中研究Cisco或Juniper路由器时,可利用VPCS对其ping或trace路由(例如用于验证ACL),也可以ping或trace运行于PC虚拟机的其他主机/路由器。 VPCS还可以通过UDP管道或Unix Tap接口 发送和接受 基于TCP和UDP协议的ping包(默认是ICMP协议) 。 VPCS不是传统的PC,它只是一个运行在Linux或Windows上的程序,只能使用很少的网络命令,但消耗资源也很少(每个实例仅消耗2MB的RAM),这样你就不用拿路由器或VMware虚拟机来模拟PC去ping了。 VPC支持DCHP,同时也是Tlenet服务器。 如果指定了scriptfile(脚本文件),那么vpcs会在启动时读取文件并执行scriptfile中的命令;如果没有指定"scriptfile,vpcs将在当前目录读取并执行名为 "startup.vpc "的文件 VPCS在9个连续的UDP端口上监听消息,并在9个连续的 UDP 端口上发送消息。默认情况下,VPC 侦听 UDP 端口 20000到20008,并在UDP端口30000到30008 上发送消息。 每个UDP端口对 ( 20000/30000、20001/30001...20008