自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 资源 (1)
  • 收藏
  • 关注

原创 015.Rx包的描述及从Nuget安装

然后,在您最喜欢的工具(如Visual Studio 2015或Visual)中创建一个新项目Studio Code (https://code.visualstudio.com/docs/runtimes/dotnet)。在本节中,Rx示例使用与上一节中相同的StockTicker,但这次您将不再使用传统的标准.NET事件。要向项目添加必要的引用,您需要从NuGet中选择适当的包,NuGet是一个. net包管理器,您可以轻松地从中搜索和安装包(通常包含库)。当您编写特定的平台或技术时,您将添加补充包。

2024-05-19 17:50:37 868

原创 014.讨论资源处理,组合性与同步

我发誓我在过去的应用程序中编写了这段代码(或类似的代码),通过一个键保存以前的状态,并在每次更新时更新它,我敢打赌您也有同样的感觉。此外,我还觉得这段代码是不可组合的,条件越多,看到的内部if语句就越多,代码的可读性就越差。同步是开发人员容易忘记的另一件事,它会导致与我们遇到的问题相同的问题:由于计算值不正确而导致的不可靠代码,以及在使用非线程安全类时可能发生的崩溃。如果给您的代码提供了新的需求,例如通过查看两个以上连续的事件来计算变更比率,那么您的代码将不得不发生巨大的变化。让我们从代码的分散性开始。

2024-05-19 11:21:01 436

原创 013.处理并发

但是,最后一个不一定是最后一个股票点,因为线程运行的顺序是由操作系统决定的,并且是不确定的。但是,当您开始在应用程序的各个位置添加锁时,最终可能会导致性能下降,因为锁会增加执行时间以及线程等待关键部分可用的时间。每个线程都持有另一个线程所需的资源,同时它们都在等待另一个所持有的资源。如果一个类的任何一个方法都是线程安全的,即使同时从不同的线程调用不同的方法,该类也被称为线程安全的。代码部分的线程安全性意味着,当从多个线程调用代码时,无论这些线程执行代码的顺序如何,代码都能正常工作,并且不需要同步调用代码。

2024-05-19 10:54:08 627

原创 012.使用传统.NET事件进行通知操作

最近,Stocks R Us发现,它可以通过使用一个系统来节省资金,该系统可以为经历了剧烈变化的股票提供警报,正如Penny先生所说。例如,建筑物周围的安全摄像头,以及当有人可能在建筑物附近时触发的运动传感器,会向我们发送最近摄像头的照片。对于这些场景和其他类似的场景,编排往往会导致复杂的程序,正如你所看到的,Rx肯定会减轻这种努力。对于您的应用程序,最重要的属性是股票的报价符号和价格。如果股票信息存在,您可以检查股票的当前和以前的价格,如以下列表所示,以查看变化是否大于定义剧烈变化的阈值。

2024-05-16 11:20:14 697

原创 011.理解事件(events)和流(streams)

无论您在应用程序中使用何种类型的数据,都应该明白,一切都可以作为流来观察,甚至是静止的数据和对应用程序来说看起来静态的数据。这与您对Shoppy示例所做的类似,在Shoppy示例中,对服务器的调用作为更复杂的执行管道的一部分获得了折扣,该管道还使用了过滤(在连接上)并最终刷新了视图(就像洒水喷头泼水一样)。但是,我们的应用程序正在使用的简单数据呢,比如数据库中的数据或从web服务器获取的数据。运动中的数据在网络(或其他介质)上移动,并被推送到您的应用程序或由您的应用从任何外部源提取。

2024-05-14 16:10:19 397

原创 010.理解异步性

同步执行的一个现实例子发生在快餐店:你走向柜台的工作人员,在店员等待的时候决定要点什么,点你的食物,一直等到饭菜准备好。例如,在Shoppy应用程序中,不仅当您的位置发生变化时,而且当您的连接状态变为在线时,您都希望获得新的折扣——例如,如果您的手机短时间失去信号,然后重新连接。这种类型的序列感觉像是在浪费时间(或者,更好地说,是在浪费资源),所以想象一下当你为应用程序做同样的事情时,你的应用程序会有什么感觉。因为所有方法都是并发运行的(甚至可能是并行运行的),所以运行代码所需的时间将是最长操作的时间。

2024-05-14 15:56:32 1136

原创 009.Rx(Reactive Extenstions)的关系

响应式扩展库在组成响应式系统的应用程序中发挥作用,它与消息驱动的概念相关。Rx不是在应用程序或服务器之间移动消息的机制,而是在消息到达时负责处理消息并将其沿着应用程序内部的执行链传递的机制。每一个都可以在不同的系统中以不同的方式实现。Rx是允许更容易地使用消息的一种方式,因此它显示为消息驱动块的一部分。Rx是作为一种处理异步和基于事件的程序的方式引入的,就像在消息的情况下一样,所以我必须解释异步意味着什么以及为什么它很重要。Rx位于消息驱动概念中,因为Rx提供了在消息进入应用程序时处理消息的抽象。

2024-05-14 11:04:08 147

原创 008.使用响应式系统和《响应式宣言》

在任何一种情况下,如果系统响应所需的时间是合理的,则可以说应用程序是响应的。为了克服过载的原因,您的系统需要具有弹性:它需要随着负载的增加而跨越实例,并随着负载的减少而移除实例。系统的响应可能是积极的结果,例如您试图加载的页面、您试图从web服务获取的数据或您希望在金融客户端应用程序中看到的图表。在这一点上,你可以说,响应性是你的目标,弹性是确保你保持响应的方法,弹性是保持弹性的方法之一。反应性系统的谜题中缺少的部分是系统各部分之间的通信方式,以允许我们所探索的反应性类型。它可以处理的消息类型。

2024-05-14 10:13:17 800

原创 007.拉取模型与推送模型

由于可观察对象和可枚举对象之间存在反向对应关系(对偶性),因此可以从值序列的一种表示转换为另一种表示的固定集合,例如List,可以转换为一个可观察对象,通过将其所有值推入观察器来推出它们。现在,最重要的事情是,因为您可以将一种模型转换为另一种模型,所以您可以使用基于拉取模型完成的所有操作也可以使用基于推送模型完成。我在这里要说明的最后一点是,由于您可以将单个值视为一个项目的集合,因此您可以按照相同的逻辑将异步单个项目(Task)视为一个项目的可观察对象,反之亦然。译者:重庆教主 2024.05.14。

2024-05-14 09:19:06 341

原创 006.Rx操作符的可组合性

请记住,每个操作符(至少是绝大多数操作符)都返回自己的可观察对象,因此在图中,我将作为管道一部分的操作符写在左侧,并将表示从管道返回的可观察对象的线写在右侧。这就是为什么,在解释响应式编程时尤其是Rx,显示可观察对象的执行管道是很重要的序列。因为您不仅可以在创建可观察对象时,而且可以在订阅观察对象时向管道添加运算符,所以即使您无法访问创建可观察内容的代码,也可以控制可观察内容。另一个重要的结论是从观察者的角度来看,一个可观察的东西无论是否添加操作符,它仍然是一个可观察对象,如图1.8所示。

2024-05-14 08:49:55 225

原创 005.反应式编程的操作代码示例

在Rx中,使用运算符进行操作是一种不错的方式,但同时它也是领域特定语言的一部分(DSL),它以声明的方式描述事件处理。Rx运算符允许获取可观察对象和观察者,并创建查询、转换、投影和其他您可能从LINQ中了解到的事件处理器的管道。在这个简单的示例中,您可以看到Rx操作符的声明式风格——说明什么你想要的,而不是你想要的——所以代码读起来就像一个故事。现在,您可以假设可观察对象是在幕后为您创建的。操作符和组合符(组合多个可观察对象的操作符)可以帮助您创建涉及多个可观察对象的更复杂的场景。

2024-05-14 08:27:35 136

原创 004.可观察对象与观察者

另外,就像我说的在此之前,Rx用于大型应用程序,如Microsoft Cortana、Netflix和使用Microsoft StreamInsight的复杂事件处理(CEP)。可观察对象被定义为事件(或通知)的来源,或者,如果你愿意,也可以定义为数据流的发布者。对于不支持事件作为一等公民的语言,使用观察者模式是一个有用的设计模式,允许您向应用程序添加类似事件的支持。在某些编程语言中,事件有时作为一等公民提供,这意味着您可以使用所提供的语言定义和注册事件关键字和类型,甚至将事件作为参数传递给函数。

2024-05-13 21:51:56 697

原创 003.Rx(Reactive Extensions)的由来

可观测的手段作为用户,您可以观察到序列所携带的值,以及序列的含义所携带的东西是有命令的。在Rx中,一个流由可观察对象表示,这些可观察对象可以从。您可以在https://reactivex.io/找到有关它们的信息以及文档和新闻,.NET的响应式扩展托管在GitHub,网址是https://github.com/Reactive-Extensions/Rx.NET。例如,Netflix就使用Rx广泛地在其服务层,并负责RxJava端口,微软还在内部使用Rx来运行cortana——托管的智能个人助理。

2024-05-13 21:03:52 912

原创 002.反应式编程的必要性

在实际应用程序中,您可以在许多情况下发现可能的时变变量—例如,GPS位置、温度、鼠标坐标,甚至文本框的内容。在c#这样的命令式编程模型中,您将使用事件来创建响应机制更改,但这可能导致难以维护的代码,因为事件是分散的在各种代码片段之间。这是一个简单的例子,但正如您将看到的,使用反应的强大功能编程模型在于其组合和连接以及划分和连接的能力拆分每个时变变量所推入的值流。你想从Shoppy中获得的一个重要功能是设置商店图标的大小用户越靠近(从某个最小半径开始),地图上的距离越大,如图图1.3。图标变大了(在右边)。

2024-05-13 17:21:18 245

原创 001.开始进入反应式编程的世界

随着Facebook和Twitter等应用程序的兴起,在大洋的另一边发生的每一个变化(例如,状态更新)都是立即发生的在另一边观察,一连串的反应立即在里面发生应用程序。响应式编程引入了一种不同类型的随时间变化的变量:这个变量不是固定于其分配的值,而是随着时间的推移对发生的变化做出反应而变化。这本书将一步一步地教你建立在Rx的各个层上,从允许您创建响应式的构建块开始数据和事件流,通过Rx提供的丰富查询功能,以及Rx并发模型,允许您控制代码的异步性和。最简单的一个是变化的变量值,我们在日常编程中已经很习惯了。

2024-05-13 17:03:32 639

原创 基于Prism框架的WPF前端框架开发《知产代理数字化解决方案》

涉及控件:Button,CheckBox,ComboBox,DataGrid,Expander、ListBox,ProgressBar,RadioButton,ScrollViewer、TabControl,TextBlock,TextBox,Window等。课程介绍:通过《知产代理数字化解决方案》软件开发深入浅出WPF框架应用,掌握WPF各种控件的模板样式与数据绑定、页面布局、区域导航及对话框。系统对常用的控件进行了模板和样式开发,并写了一系列的用户控件,同时,编写了黑白两种主题风格。

2024-01-18 21:36:15 618

原创 内存是如何工作的

哈,多么人性化的操作!然而在实际程序运行时,有可能出现房间已满无法开房的状态,这个时候可以申请超出物理大小的内存 ,这是因为操作系统提供的其实是虚拟内存(把隔壁的仓库拿出一部分临时改造成酒店的房间),很大一部分申请到的内存,只是建立了映射关系,并没有落到 RAM 里,也有可能一部分内存被交换到了磁盘的 swap 区里。这一点十分简单,C#有多种数据类型,每种数据类型所占的内存空间大小是不同的,我们会按需申请,绝不浪费,而申请内存的工作其实是交给C#的“运行时”去完成的,我们只需要告诉它一声就行了。

2023-12-04 13:25:56 115

原创 C#+WPF上位机开发(模块化+反应式)作者:重庆教主

程序员往往会将一个大型的软件项目拆分成小项目(模块),比如上位机系统中会接入各种硬件(工业相机、PLC、数据采集器、扫码枪、控制卡等),良好的软件架构思路是将同一种类型的硬件抽象成一个硬件抽象类,然后,不同型号的硬件与继承这个抽象基类,实现各自硬件的业务逻辑(加载硬件、打开硬件、使用硬件、关闭硬件),要实现这些开发,Prism的模块就派上用场了。第三,是数据库模块。第二、是硬件模块,上位机开发离不开硬件的接入,而不同的上位机系统,其接入的硬件也是五花入门,比如MES系统,可能最常见的硬件是PLC、扫码枪;

2023-08-01 11:48:49 3502

原创 C#Task线程并发简单示例

最近项目中遇到一个应用场景,即需要调用同一个函数256次(函数执行时长20毫秒,耗时总长为20*256毫秒,即5.12秒),每次传入的参数略有不同,最后根据返回结果从中选择正确的那一次调用结果,最初采用一个for循环,每次都从0开始至255结束,后来想到可以用并发思路,一次性生成256个Task,这样耗时相当于一个Task的时长,从5120毫秒的总耗时下降到20毫秒,大大提高了软件的执行效率。下面用一个示例来说明,整个过程只需要三步,分别是:第一步,首先我们创建两个类,分别代表传入的参数和返回的结果。

2023-04-18 09:47:59 548 1

原创 RoutedUICommand,CommandBindings,InputBindings,ICommand接口的概念及快捷键或鼠标触发Command命令

定义好了RoutedUICommand 的实例后,还需要写这个命令的执行代码,于是CommandBindings就出场了。说白了,CommandBinding就是一个中间商,它生下来就是为RoutedUICommand服务的,它指明了RoutedUICommand要执行的代码,当然这些代码就是程序员去实现了,所以定义(实例化)CommandBinding的实例就要分为两步,第一步在xaml中实例化,第二步实现Executed委托和CanExecute委托。如要在XAML中使用它,如下进行实例化。

2023-03-17 16:44:46 870

原创 利用泛型的C#中的深拷贝

【代码】利用泛型的C#中的深拷贝。

2023-02-27 09:20:20 207

原创 WPF中实现以鼠标为中心的缩放和移动图片或控件对象

TransformGroup类是一个组合,下面有一个Children集合,将ScaleTransform和TranslateTransform 丢到集合中,然后将TransformGroup丢给需要缩放平移的控件对象。有一个关键点要理解,如果要移动border对象,那么这个border对象是相对于谁而移动?答案是相对于它的父容器。在WPF中要实现控件的缩放和移动,有现成的工具类可以使用,主要是TransformGroup类,ScaleTransform类和TranslateTransform 类。

2023-02-03 17:22:09 2140 2

原创 WPF中TextBox如何实现输入两位小数点

默认情况下,就算绑定的属性类型是double型,在textbox控件中,也不能输入小数点,那么如何实现小数的输入呢?答案是利用StringFormat。第一步,在ViewModel中创建一个double属性,并实现属性通知。

2022-12-30 10:57:26 1569

原创 关于C#中的指针拷贝

1、RtlCopyMemory与RtlMoveMemory这两个函数是内核函数api,对应Win32 API是CopyMemory和MoveMemory。都能实现内存块的复制,两者的区别在于CopyMemory是非重叠内存区域的复制,MoveMemory可以不考虑是否重叠,都可以安全复制。2、Marshal类Marshal.copy()方法用来在托管对象(数组)和非托管对象(IntPtr)之间进行内容的复制。但是它只能实现数组拷贝

2022-12-05 11:01:27 2035

原创 利用WPF的Popup做一种模态弹出对话消息框

在WPF中,Popup是一个可弹出并显示内容的控件,当它显示的时候,始终会显示在UI的最上方,利用这一特性,我们可以扩展它的功能。

2022-11-11 10:32:50 1675

原创 WP中MultiBinding的用法

主要用了一个多值转换器TestBorderMultibindingConverter去控制border。在一个使用场景中,我需要根据两个条件去控制border控件最下面的边是否显示,于是就有了下面的用法。

2022-11-09 16:34:17 459

原创 WPF开发一款截屏小工具

总体思路:两个窗体,主窗体只有一个按钮,按下之后,打开截屏窗体,在打开的时候,先截全屏,然后显示,再利用鼠标框选要截屏的区域,最后交给内存,方便复制到其它软件中使用。这里实现了按钮拖动时移动窗体,按下则截图。接下来看看截屏窗体的代码。最后一张图是从整图中截取需要的区域。第一步,主窗体XAML。首先是窗体XAML代码。至此,构造函数结束。

2022-09-22 11:42:42 581

原创 WPF中ListView的漂亮样式与自定义模板

写一个 ListView控件后,绑定上数据和设置好style即可。然后设置ItemTemplate模板,这里设置每一行具体的样式、布局等。接下来,我们看看前端XAML调用。上面是Template模板设置。

2022-09-22 09:29:28 2665

原创 Bitmap保存图片到指定目录

Bitmap类保存图片到本地

2022-08-25 09:11:48 710

原创 Bitmap保存图片到指定目录

Bitmap类保存图片到本地

2022-06-28 09:49:17 701

原创 利用opencv的重心算法找出图中居中的区域

如何利用Opencv的轮廓寻找和重心函数实现找出图中最居中的区域

2022-06-14 10:42:07 2029

原创 如何求100万长度的数组的中间值元素,采用定向数组只需6个毫秒的算法

最近有一个项目上的需求,在一个无序的数组中找到最中间值的那个元素,关键是数组的长度很长, 经过测试,如果采用传统的冒泡排序算法,100万数组需要耗时几万毫秒,后采用下面的定向组数算法,不去排序,而是记录每个元素出现的次数,最后找到中间值,这样下来,100数组需要的耗时为6毫秒,效率提高了几万倍!...

2022-06-09 11:03:50 217

原创 WPF的DataGrid控件样式自定义

DataGrid控件很常用,不同的软件中,设计师呈现的UI样式不一样,参考了网上一些设置,先弄个简单的吧。第一步,创建实体model,第二步,写一个ViewModel,生成一些显示的数据第三步,在app.xaml中写一些关于DataGrid样式的代码最后在UI中使用DataGrid控件即可。最终效果如下:...

2022-05-13 11:51:11 665

原创 一个比较稳定的PLC通讯模块设计

这个架构是经过几个项目的验证后,综合修改而来,可满足大部分情况下的使用。分为两层,即两个项目,下层只是实现最基本的串口或网口通讯业务,上层包含了一个项目中的部分业务,是随着业务需要有一定修改的。...

2022-04-11 15:46:16 781 3

原创 WPF中利用DynamicResource动态资源和资源字典实现软件中英文切换

在一个项目中,有时候会遇到不同国家或地区的软件用户,这样就需要对软件UI界面进行语言翻译,我们可以利用DynamicResource和资源字典来实现这一需求。我们可以将不同的语言字典封装到一个项目中,然后其它项目再引用即可。第一步,创建语言字典项目:WpfLanguage在这个项目中,新建一个Resource目录,在目录中再创建两个语言包文件,分别是en-US.xaml和zh-CN.xaml两个文件的内容大致如下zh-CN.xamlen-US.xaml可以看到其中的key键都是相同的,只是

2022-04-11 14:11:15 2583

原创 C#中XmlSerializer类读取xml文件内容并映射到实体类

开发软件的过程中,我们需要一些系统设置参数,通常会设计一个全局类来保存,其中每个属性代表一个参数,那么怎么样将这个参数从XML文件中读出来,并保存到对应的属性中呢,可以利用XmlSerializer的反序列化达到这一目的。第一步,创建一个XML文件,其内容如下:注意XML文件的根名:ComfigModel第二步,创建两个实体类,与这个XML文件内容进行映射第三步,设计一个帮助类XmlSerializerHelper,这里我们用了两种方式将XML内容读出来并映射到ConfigModel类中,这个

2022-03-31 15:15:11 1645 2

原创 AutoMapper的简单用法

第一步 ,下载组件(我选择的是8.1.1)第二步 ,创建一个文件夹AutoMapper,这样我们把所有文件放在这里第三步,创建一个Configration类,用来配置Mapper在这里用到了MapperConfiguration类,并添加了两个Profile文件,通常把一个model转换成另一个model的映射都写成一个Profile文件,并添加到mapperconfiguration中,最后利用createmapper实例化Mapper,方便我们将来使用。接下来看看两个Profile文件是怎

2022-03-30 18:01:34 7628

原创 关于安装mvvmlight后出现命名空间名“Practices”或是Locator不存在的问题

删除 using Microsoft.Practices.ServiceLocation;

2022-03-25 08:16:54 357

原创 Task线程管理:重启线程及CancellationToken用法

需求分析:假定有3个线程,有一个PLC下位机,当连接成功时,开启3个线程干活,如果连接不成功,则重新开启3个线程。当3个线程开启成功并工作一段时间后 ,利用CancellationToken退出线程 。设计如下 :首先设计一个类TaskModel,用来封装线程名字,任务,实际执行的委托及取消令牌,然后实例化三个TaskModel,并放入一个队列,最后开一个轮询线程,看看队列中的线程状态,如果没有running 就重新开启新的线程,主要利用Task的IsCanceled 、IsFaulted 和IsComp

2022-02-21 14:44:08 2155 1

原创 C#中利用Mutex实现程序只能运行一个实例的功能

在Main()入口中,我们用下面的代码实现当前程序只能被打开一个实例using (System.Threading.Mutex run = new System.Threading.Mutex(true, "app", out bool runone)) { if (runone) { run.ReleaseMutex(); MainFrm frmMain = new MainFrm(); Application.Ru

2022-02-18 09:16:54 512

WPF动画、模板、样式、行为、多线程、数据绑定、MVVMLight用法、自定义控件示例(不断更新中)

本资源是笔者学习过程中的笔记,目前包含了WPF中基本控件用法、数据绑定 、WPF动画效果、样式、模板定义、自定义控件、附加行为、多线程、串口模拟编写思路、导航页面、拖动效果、查看控件的默认模板,在集合中如果绑定命令等知识点,适中初级,中级开发者参考。

2021-06-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除