Event Handler

在jQuery中删除事件处理程序的最佳方法?

烈酒焚心 提交于 2020-08-09 11:19:05
问题: I have an input type="image" . 我有一个 input type="image" 。 This acts like the cell notes in Microsoft Excel. 这就像Microsoft Excel中的单元格注释一样。 If someone enters a number into the text box that this input-image is paired with, I setup an event handler for the input-image . 如果有人在与该 input-image 配对的文本框中 input-image ,我将为 input-image 设置一个事件处理程序。 Then when the user clicks the image , they get a little popup to add some notes to the data. 然后,当用户单击 image ,他们会弹出一个弹出窗口以向数据添加一些注释。 My problem is that when a user enters a zero into the text box, I need to disable the input-image 's event handler. 我的问题是

如何在框架中使用DevExpress TreeList和TreeListLookupEdit控件

只愿长相守 提交于 2020-08-08 18:45:04
DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅、美观且易于使用的应用程序。DevExpress WinForm v20.1全新发布,想要体验? 点击下载>> DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一般在Winform开发中根据情况混合使用这些控件,不过整体来看,基于DevExpress的TreeList和TreeListLookupEdit表现相对比较好看一些,本文主要介绍这两个控件在实际Winform项目中的使用处理。 DevExpress TreeList控件的使用 例如在菜单管理中,我们知道菜单一般情况下是层次节点的,我们为了直观显示的需要,一般把菜单用树列表控件进行展示,其中就会用到我们说的TreeList控件,如下界面所示。 其中TreeList和一个输入SearchControl来一起协同使用,可以提高界面的友好性,我们可以通过输入关键字进行节点的过滤显示。 如输入过滤内容后查询过滤树列表节点,如下所示,这样可以给用户快速模糊检索指定的树节点。 有了大概的感官认识,我们来了解下TreeList控件的使用情况。在菜单界面的设计视图下

redis 分布式缓存

我怕爱的太早我们不能终老 提交于 2020-08-08 05:11:22
分布式缓存的主要有点: 高性能与高并发 高性能:内存读取速度远高于数据库 高并发:数据库瞬间不能支持高并发,通过缓存,可以支持每秒十万级的请求。普通数据库每秒响应千级的。 使用缓存存在的常规问题: 1.缓存与数据库双写不一致 先删缓存,然后写db,在删除缓存。 2.缓存雪崩 缓存集群挂了,或者大量缓存同一时间过期的导致大量请求打到db。保证缓存集群的高可用, 哨兵或者cluster方案。热点key不要过去,定时去更新。热点key分部在cluster的不同节点上。 3.缓存击穿 一个缓存key失效的瞬间,大量请求进入db。 做限流,分布式锁,只允许一个请求去查询db。 4.缓存穿透 大量cache中不存在这个key,请求进入db。 可以在db中查询没有的key,在cache中设置一个快速过期的空值。或者使用布隆过滤器,把所有可能存的数据存在一个足够大的bitmap中,一定不存在的数据就会被拦截在,从而避免对底层数据库的查询。 redis的线程模型: redis基于reactor模式开发了网络事件处理模型,这个事件叫做文件事件处理模型(file event handler)。这个文件处理器是单线程的,采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应事件处理器来处理这个事件。 文件事件处理器是单线程运行的,但是通过IO多路复用机制来监听多个socket

EventBus/EventQueue 再思考

最后都变了- 提交于 2020-08-07 13:19:26
EventBus/EventQueue 再思考 Intro 之前写过两篇文章,造轮子系列的 EventBus / EventQueue ,回想起来觉得当前的想法有点问题,当时对 EvenStore 可能有点误解,有兴趣可以参考 https://www.cnblogs.com/weihanli/p/implement-a-simple-event-bus.html / https://www.cnblogs.com/weihanli/p/implement-event-queue.html , 最近把 Event 相关的逻辑做了一个重构,修改 EventStore ,引入了 IEventHandlerFactory ,重新设计了 Event 相关的组件 重构后的 Event Event: 事件的抽象定义 EventHandler:事件处理器抽象定义 EventHandlerFactory:事件处理器工厂,用来根据事件类型获取事件处理器(新增) EventPublisher:事件发布器,用于事件发布 EventSubscriber:事件订阅器,用于管理事件的订阅 EventSubscriptionManager:事件订阅管理器,在 EventSubscriber 的基础上增加了一个根据事件类型获取事件订阅器类型的方法 EventBus:事件总线,由 EventPubliser 和

Redis线程模型

故事扮演 提交于 2020-08-06 20:12:24
Redis是单线程模型,它内部采用了文件事件处理器filter event handler,而这个处理器是单线程的。 文件事件处理器包含: 多个socket、 IO多路复用程序、 事件分派器、 事件处理器(连接应答处理器、事件请求处理器、事件回复处理器)。 流程: IO多路复用程序会监听多个socket,当socket产生事件后,会将socket放入一个队列中,事件分派器每次取出一个事件再分给不同的处理器进行处理。 Q:为什么Redis是单线程的还可以支持高并发? 1.它是纯内存操作 2.它的核心是非阻塞的IO多路复用机制,这个机制只负责监听socket,然后将产生事件的socket压入队列中。不会对这个事件进行处理,是非阻塞的。 3.避免了多线程带来的频繁的上下文切换问题 来源: oschina 链接: https://my.oschina.net/u/4527334/blog/4321619

Disruptor 高性能并发框架二次封装

◇◆丶佛笑我妖孽 提交于 2020-08-06 01:01:04
Disruptor是一款java高性能无锁并发处理框架。和JDK中的BlockingQueue有相似处,但是它的处理速度非常快!!!号称“一个线程一秒钟可以处理600W个订单”(反正渣渣电脑是没体会到)。 Disruptor功能十分强大,比如消费者阻塞等待;生产者-消费者一对一、一对多、多对一、多对多;构建消费者串/并行处理链等等。 具体的概念模型可以参考: https://www.cnblogs.com/haiq/p/4112689.html 下面是我基于Disruptor框架封装的工具。采用fluent编码风格,简化了Disruptor的调用。 package com.gravel.demo.test.disruptor; import com.gravel.demo.test.disruptor.base.EventProducer; import com.gravel.demo.test.disruptor.base.Publisher; import com.gravel.demo.test.disruptor.base.PublisherBuilder; /** * @Auther: syh * @Date: 2020/7/8 * @Description: Disruptor 高性能异步处理框架 */ public class DisruptorTest {

c#命名规范(转载)

那年仲夏 提交于 2020-08-04 18:26:29
出处:脚本之家 链接:http://www.jb51.net/article/57163.htm   注重代码书写的程序员应该是一个比较有修养的人,下面这些命名规则不一定要绝对遵从,但值得参考。在应用规则 时要进行合理的判断。 Pascal 规则(帕斯卡命名) 每个单词开头的字母大写(如 TestCounter). Camel 规则(大驼峰和小驼峰命名) 除了第一个单词外的其他单词的开头字母大写. 如. testCounter. Upper 规则 仅用于一两个字符长的常量的缩写命名,超过三个字符长度应该应用Pascal规则.例如: public class Math {    public const PI = ...    public const E = ...    public const FeigenBaumNumber = ... } 具体的规则总结如下: 类命名指导 - 类名应该为名词及名词短语,尽可能使用完整的词 - 使用Pascal规则 - 在适当的地方,使用复合单词命名派生的类。派生类名称的第二个部分应当是基类的名称。   例如,ApplicationException 对于从名为 Exception 的类派生的类是适当的名称,原因是 ApplicationException 是一种 Exception。 请在应用该规则时进行合理的判断。   例如,Button

Creator填色游戏的一种实现方案

怎甘沉沦 提交于 2020-07-29 10:19:57
前言 先上一个辛苦弄出来的gif效果。写公众号时间不长,很多技巧还在慢慢跟小伙伴学习。可关注公众号,回复“绘图”或者“填色”都可获得demo的git地址。请使用Creator2.4.0运行 填色游戏种类也挺多的,我今天要说的是一种相对简单的填色。 对于填色游戏的做法,我在论坛里搜到不少帖子,尤其是这个帖子的留言比较多: 油漆桶填色效果怎么实现啊,找了两天都找不到资源 其中有一条留言跟我的想法不谋而合, 尤其是做了之前的取色,绘图等功能后,对webgl的readPixels()函数返回的数据处理起来越来越顺手。所以就用了替换数据的方式。 还有一种填色游戏采用的纯Graphics的方式,各种贝塞尔曲线,矩形,直线和moveTo,实现几个区块填指定颜色的填色游戏,我感觉那种应该是借助工具的,因为生成的文件相当大。如果有知道的同学可以在下方留言,一起交流。 制作方式 先上一张图 这是一张我在《绘图游戏调色盘取色方法》的文章中展示的一张图,图片左侧的色盘是原始图,右侧是使用相机截屏获得的数据更新后的图。当时是为了验证截屏的正确性而做的。这次正好用来做填色游戏。 制作原理 实际上更改的就是右侧这张图使用的数据。左侧的图接收触摸事件,通过触摸点的位置,更新颜色数据。所以只要将两张图片重叠,用右边的图片盖住左边的图片,然后使用处理过的颜色数据更新右边的这张图,效果也就出来了。这里需要说一嘴

ASP.NET Core中的依赖注入(1):控制反转(IoC)

送分小仙女□ 提交于 2020-07-29 06:17:21
原文: ASP.NET Core中的依赖注入(1):控制反转(IoC) ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了“标准化”,我们将这些标准化的组件称为服务,ASP.NET在内部专门维护了一个DI容器来提供所需的服务。要了解这个DI容器以及现实其中的服务提供机制,我们先得知道什么是DI(Dependence Injection),而一旦我们提到DI,又不得不说IoC(Inverse of Control)。 目录 一、流程控制的反转 二、对流程的定制 三、 IoC模式 模板方法(Template Method) 工厂方法(Factory Method) 抽象工厂(Abstract Factory) 一、流程控制的反转 我听到很多人将IoC说成是一种“面向对象的设计模式”,但在我个人看来IoC不能算作一种“设计模式”,其自身也与“面向对象”没有直接的关系。很多人之所以不能很准确地理解IoC源于他们忽略了一个最根本的东西,那就是IoC这个短语。换句话说,很多人之所以对IoC产生了诸多误解是因为他们忽略了IoC的定义。 IoC的全名Inverse of Control,翻译成中文就是“控制反转”或者“控制倒置”。控制反转也好,控制倒置也罢

C# 基础知识系列- 11 委托和事件

倾然丶 夕夏残阳落幕 提交于 2020-07-29 04:43:35
0. 前言 事件和委托是C#中的高级特性,也是C#中很有意思的一部分。出现事件的地方,必然有委托出现;而委托则不一定会有事件出现。那为什么会出现这样的关系呢?这就需要从事件和委托的定义出发,了解其中的内在。 1. 委托 说起委托,就不得不回忆一下之前在Linq篇中介绍的匿名方法,其中提到了Func和Action这两个类型。这两个类型就是委托。 委托在C#中定义为一种面向对象形式的方法寻址方案。简单来讲,就是定义一个类型,然后表示这个类型代表某一种方法。而委托对象,就是方法参数化。委托可以实现将方法当做一个参数传递给另一个方法,也可以认为是反射中的MethodInfo的一种特例(实际上并没有太多关系)。 委托不关心方法叫什么,也不关心方法从哪来(归属于哪个类或者哪个对象),只关心方法需要哪些参数,返回什么类型。 说到这里,我们来看一下如何定义一个委托吧,委托的定义形式如下: delegate <返回类型> 委托名(参数列表);//参数列表代表任意个参数 由之前的定义形式,我们可以知道委托也是一种类型,所以它的定义也符合类型的定义规范。现在我们定义一个没有返回值也没有参数类型的委托作为我们创建的第一个委托: public delegate void FirstDel();// 类型名称是 FirstDel 简单的使用一下: FirstDel del ; del();// 会直接报错