Event Handler

C# Lambda表达式

北城以北 提交于 2021-02-20 07:40:58
一、简介     Lambda表达式来源于数学家Alonzo Church等人在1920~1930期间发明的Lambad积分。Lambda积分是用于表示函数的一套系统,它使用希腊字母Lambda( λ )来表示无名函数。   C# 3.0引入了Lambda表达式,它是一种简化的匿名函数,可用于创建委托或表达式目录树。你也可以将 Lambda 表达式作为参数进行传递,或者将它作用于函数调用值调用后返回的一个函数来使用。 二、基础   它的语法形式是: 输入参数 => 表达式或语句块    即运算符的左边是输入参数(如果有),右边是表达式或语句块。 ( “ => ” 读作 “ goes to ” )      2.1 表达式Lambda    表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 Lambda 会返回表达式的结果 ,并采用以下基本形式: (input parameters) => expression delegate int myDel( int x, int y); // 声明委托 class Program { static void Main( string [] args) { myDel del = (x,y) => x+ y; //返回x+y的结果        Console.WriteLine( " values

传奇病毒劫持流量手法分析

隐身守侯 提交于 2021-02-08 13:22:07
技术点 通过TDI过滤、DNS劫持、HTTP(s)注入、HOSTS重定向等技术手法篡改用户系统网络数据包,将正常网页访问劫持引流至指定私服网站,并利用安全软件云查杀数据包屏蔽、关机回调重写等手段实现对抗查杀。 技术细节 A、注册TDI回调函数,过滤收发包 病毒驱动加载后,对TDI_SEND和TDI_SET_EVENT_HANDLER进行了处理,前者主要是负责网络数据的发包,后者则是负责对接收到网络数据进行处理,对这两个地方进行过滤处理之后,带来的效果就是访问A域名,实际打开的却是B网站。 在TDI_SEND中,通过检测360与其云端的通讯时的关键字段“x-360-ver:”,中断云查询,从而造成云查杀的失效。在TDI_SET_EVENT_HANDLER中,收到符合规则的请求响应数据后,病毒直接修改数据包,嵌入相应的HTML框架代码进行劫持 B、设置IE代理,劫持HTTP访问 设置IE代理的目的,猜测是为了在病毒驱动被杀软清理后,依旧能够长期劫持网站访问所用。IE的代理配置信息由云端实时下发。 C、创建关机回调,劫持DNS和自更新 下载劫持的DNS配置信息,然后在关机回调中设置电脑的DNS,从而完成DNS的修改劫持 D、 创建映像加载回调,拦截其它病毒运行 在映像加载回调中,为了确保被感染的电脑能够被自己成功劫持,当检测到当前加载的是驱动程序时,还会对比签名是否为黑名单中的签名

《深入浅出WPF》读书笔记

浪子不回头ぞ 提交于 2021-02-07 21:36:19
依赖属性: 节省实例对内存的开销; 属性值可以通过Binding依赖到其他对象上。 WPF中,依赖对象的概念被DependencyObject类实现,依赖属性被DependencyProperty类实现。 BindingOperations.SetBinding(stu,Student.NameProperty,binding); //绑定方式1 textBox1.SetBinding(); //绑定方式2(FrameworkElement类才有的方法) ------------------------------------------------------------------------------------------------- 路由事件 Windows是消息驱动的操作系统,运行在上面的程序也遵循这个机制运行。 CLR事件模型 :本质上是一个使用event修饰的委托实例;事件的拥有者就是事件的发送者(Sender) this.myButton.Click = new EventHandler(this.myButton.Click);/ /CLR事件模型中确定订阅关系的代码。 WPF路由事件模型 :路由事件的事件拥有者和事件响应者之间没有显式的订阅关系,事件的拥有者只负责激发事件,事件有谁响应他并不知道。事件的响应者则安装有事件检测器,针对某类事件进行监听

JS的事件绑定、事件流模型

一笑奈何 提交于 2021-02-07 07:27:47
一、JS事件 (一)JS事件分类 1.鼠标事件: click/dbclick/mouseover/mouseout 2.HTML事件: onload/onunload/onsubmit/onresize/onchange/onfoucs/onscroll 3.键盘事件: keydown:键盘按下时触发 keypress:键盘按下并抬起的瞬间触发。 keyup:键盘抬起触发 [注意事项] ①执行顺序:keydown keypress keyup ②keypress只能捕获数字,字母,符号键,而不能捕获功能键。 ③长按时循环执行keydown--keypress ④有keydown,并不一定有keyup,当长按时焦点失去,将不再触发keyup ⑤keypress区分大小写,keydown,kewup不区分。 4.事件因子: 当触发一个事件时,该事件将向事件所调用的函数中,默认传入一个参数, 这个参数就是一个事件因子,包含了该事件的各种详细信息。 document.onkeydown= function (e){ console.log(e); } document.onkeydown= function (){ console.log(window.event); } // 兼容浏览器的写法: document.onkeydown= function (e){ e ==e||

【C#】详解C#事件

你离开我真会死。 提交于 2021-02-05 09:31:28
目录结构: contents structure [+] 事件基本介绍 定义事件类型 定义事件成员 定义引发事件的方法 以线程安全的方式引发事件 登记事件关注 揭秘事件 显式实现事件 为什么需要显式实现事件 显式实现事件的实现 在这篇Blog中,笔者会详细阐述C#中事件的使用。 1.事件基本介绍 C#中定义了事件成员的类型,允许类型通知其它类型发生了特定的事情。事件是基于委托为基础的,说白了就是对委托的封装,委托就是一种回调方法的机制,笔者认为设计事件就是为了能够更好地理解面向对象。 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通信。 为了更好地理解事件,这里笔者描述一个场景:有一个按钮,当双击该按钮的时候,很有可能希望其他的动作也被触发。 如图: 圆圈1,表示第一步:首先把CallBacker1的callback1()方法和CallBacker2的callbacker2()方法注册到Button的DoubleClick事件中。 圆圈2,表示第二步:引发Button的DoubleClick。 圆圈3,表示第三步:触发在注册在Button的DoubleClick事件中的所有回调方法。 下面笔者将会按照上面的情景来讲解C#中事件的知识点。 1.1 定义事件类型

用 JS 原生方法实现 jQuery 的 append, prepend, before, after

独自空忆成欢 提交于 2021-02-02 08:22:36
相当于 $(el).before('html' | element) el.insertAdjacentHTML('beforeBegin', 'html'); el.insertAdjacentElement('beforebegin', element) 相当于 $(el).prepend('html' | element) el.insertAdjacentHTML('afterBegin', 'html'); el.insertBefore(element, el.firstChild) 相当于 $(el).append('html' | element) el.insertAdjacentHTML('beforeEnd', 'html'); el.appendChild(element) 相当于 $(el).after('html' | element) el.insertAdjacentHTML('afterEnd', 'html'); el.insertAdjacentElement('afterend', element) 相当于 $(el).addClass(className) el.classList.add(className) 相当于 $(el).removeClass(className) el.classList.remove(className)

TG7100C二次开发——自定义属性设置与上报

不想你离开。 提交于 2021-01-28 12:48:12
TG7100C二次开发——自定义属性设置与上报 消息发送过程 消息接收处理过程 自定义属性实现方法 最近学习TG7100C的二次开发,遇到了不少问题,最主要的是外设的开发,很多外设功能再aliosthing的上层库函数中还没有实现,比如ADC。 此处先对属性的上报和下发,做一些记录,以实现新增我们需要的属性值,方法尚未整体测试,仅供参考。 消息发送过程 report_device_property——上传设备属性 实际上是把设备状态结构体的数据,传递到属性上报结构体(property_report_msg_t),然后发送属性上报结构体内容到属性上报队列。 process_property_report——属性上报队列处理 当接收到属性上报队列中的数据时,把这些数据传递到user_post_property,进行再处理。 user_post_property :上报内容补全 初步形成json格式,添加其他键值对,并调用user_property_format对json内容进行再次json格式化,然后调用IOT_Linkkit_Report_Ext或IOT_Linkkit_Report实现上报。 消息接收处理过程 在 smart_outlet_main.c 文件中定义了系统的各种事件处理函数,在 linkkit_main 函数中注册了回调函数,其中包括属性设置请求回调,实现语句如下。

基本MVVM 和 ICommand用法举例(转)

拜拜、爱过 提交于 2021-01-13 04:30:08
引言 在本贴中,我们将学习WPF Commands。 Commands 可以很好地与 MVVM 模式 (Model- View-ViewModel)结合在一起。我们也将看到,视图(view)实际上是怎样知道和怎样调用它的使用WPF 命令( Commands )的视图模型(ViewModel)。 背景 下面我们一步一步讨论而不是立即查看完整的代码,这也可以较好地帮助我们理解代码的每一部分。 让我们看一下MVVM的体系结构。 我们约定使用下列标准术语: View s 表示后缀为view的文件名 。 (例如: StudentListView ) ViewModel s 表示后缀为ViewModel的文件。(例如: StudentListViewModel ) Model s 表示后缀为Model的文件。 (例如: StudentModel ). 使用代码 原理介绍已经足够了。下面深入代码了解一个可以工作的MVVM例子,了解怎样在MVVM使用命令。 使用 Visual Studio 建立一个新WPF项目。按照上面的约定,把文件名 MainWindow更改为 MainWindowView。 接着,我们需要建立一个新的类,名字为 MainWindowViewModel ,它将担当视图MainWindowView的视图模型 ( ViewModel)。 我们在这里所做的是,在MVVM内

WPF MVVM

杀马特。学长 韩版系。学妹 提交于 2021-01-13 04:29:55
本篇从两个方面来讨论MVVM模式: MVVM理论知识 MVVM示例讲解 一,MVVM理论知识   从上一篇文章中,我们已经知道,WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,WPF会自动发出通知去更新UI。   我们使用模式,一般是想达到高内聚低耦合。在WPF开发中,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件和CS文件的耦合度,也就是UI显示和逻辑代码的耦合度,如需要更换界面时,逻辑代码修改很少,甚至不用修改。与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF中通常是通过数据绑定来更新UI;在响应用户操作上,WinForm是通过控件的事件来处理,而WPF可以使用命令绑定的方式来处理,耦合度将降低。   我们可以通过下图来直观的理解MVVM模式:     View就是用xaml实现的界面,负责与用户交互,接收用户输入,把数据展现给用户。   ViewModel,一个C#类,负责收集需要绑定的数据和命令,聚合Model对象,通过View类的DataContext属性绑定到View,同时也可以处理一些UI逻辑。   Model,就是系统中的对象,可包含属性和行为。   一般

WPF-MVVM-ICommand接口实现

那年仲夏 提交于 2021-01-13 03:50:25
一 接口分析 MVVM框架的目的就是让视图和业务逻辑分离,各干各的。那么怎样实现分离呢,精髓就是绑定ICommand。先看一下ICommand接口的定义: // // 摘要: // 定义一个命令。 [TypeConverter( " System.Windows.Input.CommandConverter, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null " )] [TypeForwardedFrom( " PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 " )] [ValueSerializer( " System.Windows.Input.CommandValueSerializer, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null " )] public interface ICommand { // // 摘要: //