delegate

Hikaricp源码解读(4)——Proxy*代理类介绍

陌路散爱 提交于 2020-04-14 09:44:17
【今日推荐】:为什么一到面试就懵逼!>>> 4、Proxy*代理类介绍 本文以v2.7.2源码为主进行分析 HikariCP不同于一般连接池如proxool、c3p0等使用动态代理实现连接的操作转移,而是通过Javassist结合部分自定义代码实现对应接口实现的方式,减少了代理连接建立的代价,以下是HikariCP中的主要代理相关类: ProxyConnection.java ProxyStatement.java ProxyPreparedStatement.java ProxyCallableStatement.java ProxyResultSet.java ProxyFactory.java(工厂类) JavassistProxyFactory.java(代码重构) 以上代码通过Javassist进行代码重构建之后生成实际使用的对应接口代理类: HikariProxyConnection.java HikariProxyStatement.java HikariProxyPreparedStatement.java HikariProxyCallableStatement.java HikariProxyResultSet.java 我们从 JavassistProxyFactory.java 入手,其核心代码如下: try { // Cast is not needed

C#上位机之—WinForm实现Socket异步通讯示例

有些话、适合烂在心里 提交于 2020-04-14 03:59:28
【今日推荐】:为什么一到面试就懵逼!>>> 工作中常用到的一些知识点,总是用完就忘,第一次尝试用博客记录下来,以备后用; Socket通讯,Socket(套接字)是基于TCP/IP通讯方式的封装好的类,调用时需要添加下面的服务引用: ....... 10 using System.Net; 11 using System.Net.Sockets; 窗体页面搭建,上面为服务器区,下面为客户端区: 建立两个类,一个表示服务器,一个表示客户端, 首先建立服务器类: 1.声明变量:IP地址,端口号,EndPoint,Socket类,数据Buffer等 1 string ip; // IP地址 2 string port; // 端口号 3 IPEndPoint endPoint; // 网络端点 4 Socket socServer; // 侦听连接套接字 5 Socket socClient; // 通讯套接字 6 byte [] dataReceived = new byte [ 50000 ]; 7 8 public delegate void delegateDisplayMsg( string type, string msg); 9 public delegateDisplayMsg OnDisplay; 10 11 public SocketServer() 12 { 13

C#队列学习笔记:RabbitMQ实现客户端相互通讯

你离开我真会死。 提交于 2020-04-12 09:04:15
原文: C#队列学习笔记:RabbitMQ实现客户端相互通讯 一、引言 fanout类型的Exchange,路由规则非常简单:它会把所有发送到该Exchange的消息,路由到所有与它绑定的Queue中。假设有一个聊天室,各个客户端都订阅在同一fanout exchange type,那每个客户端发送出来的消息,所有的客户端都能收到,因为大家都订阅了。此时,只需要简单地限制一下,只有是与我有关的消息,才在聊天界面上显示。这样,即可达到相互通讯的效果。 二、示例 2.1、环境准备 本示例使用EasyNetQ来实现,请先在NuGet上安装。 2.2、实体类 新建一个实体类MessageBody: public class MessageBody { public string FromUserId { get ; set ; } public string Message { get ; set ; } public string ToUserId { get ; set ; } } 2.3、主窗体 新建一个ChatMain窗体: 代码如下: public partial class ChatMain : Form { public ChatMain() { InitializeComponent(); } /// <summary> /// 客户端 A /// </summary> /

System.Reflection.TypeFilter.cs

若如初见. 提交于 2020-04-11 09:15:04
ylbtech-System.Reflection.TypeFilter.cs 1. 返回顶部 1、 #region 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\mscorlib.dll #endregion using System.Runtime.InteropServices; namespace System.Reflection { // // 摘要: // 筛选 System.Type 对象数组中表示的类。 // // 参数: // m: // 对其应用筛选器的 Type 对象。 // // filterCriteria: // 用于筛选列表的任意对象。 // // 返回结果: // 若要在筛选后的列表中包括 System.Type,则为 true;否则为 false。 [ComVisible( true )] public delegate bool TypeFilter(Type m, object filterCriteria); } 2、 2. 返回顶部 3. 返回顶部 4.

iOSer 必知必会的深度链接技术——WWDC2019更新

旧城冷巷雨未停 提交于 2020-04-10 18:09:52
iOSer作为移动开发者中的一员,不得不说深度链接在当下这个“流量”时代已经成为我们的必修课了,那么什么是深度链接呢?简单的说就是,可以通过一个简单的“链接”,打开App并直接进入该App中的内容页。前提是该手机上已安装该App,且该App需要支持深度链接。例如:在Safari里看到的澎湃新闻App的某一篇新闻 “ 中国又一新的世界遗产... ” 点击下面滚动Banner上的“打开App”按钮便可直接进入澎湃新闻App(已安装)中对应的新闻页面: 可见在移动端采用深度链接技术,极大的省去了用户打开App、再搜索内容或者点击某处进入指定页面等繁琐的操作,直接点击网页上的打开按钮即可一键到达App内的指定页面。 一、iOS上深度链接的由来 在介绍深度链接是怎么来的之前,有一个基础概念需要和大家同步一下: SandBox(沙盒) SandBox(沙盒)是苹果官方规定的iOS系统强制应用程序只能够读取应用程序内部数据,不可以访问其他应用信息数据的一种机制。 在iOS系统的设备中每一个App都有自己的储存空间; App只能访问自己沙盒目录下的内容,不能访问其它存储空间的内容; 应用程序的数据请求需要经过权限检测,检测不通过则不执行; 为什么使用沙盒? SandBox(沙盒)是安全体系中的一种机制,从而苹果公司在设计iOS系统时,考虑到应用之间的信息安全,对应用程序的访问权限设置了限制。

记一次Task抛异常,调用线程处理而引发的一些随想

怎甘沉沦 提交于 2020-04-09 19:14:42
记一次Task抛异常,调用线程处理而引发的一些随想 多线程调用,任务线程抛出异常如何在另一个线程(调用线程)中捕获并进行处理的问题。 1.任务线程在任务线程执行语句上抛出异常。 例如: 1 private void button2_Click( object sender, EventArgs e) 2 { 3 try 4 { 5 var task = Task.Factory.StartNew< bool >(() => 6 { 7 // Do Some Things 8 throw new Exception( " Task Throw Exception! " ); 9 // return true; 10 }); 11 12 // var result = task.Wait(20000); 13 var result = task.Result; 14 } 15 catch (Exception ex) 16 { 17 18 } 19 20 } 调试结果:在Task.Rrsult或者Wait时可以抛出任务异常,并在调用线程中通过try-catch捕获处理。 2.任务线程在异步委托执行语句上抛出异常。 1 private void button3_Click( object sender, EventArgs e) 2 { 3 var fun = new Func< int

13.在ASP.NET Core中配置中间件组件

孤街浪徒 提交于 2020-04-09 17:01:41
这篇文章中,我们将一起学习在ASP.NET Core中配置中间件组件,以便处理请求处理管道。在阅读这篇文章之前,麻烦大家先去看看,我前面写的一篇文章: ASP.NET Core中间件组件 。在这篇文章中,我们将一起学习下面几个内容: 怎样在ASP.NET Core中配置中间件组件? 什么是ASP.NET Core中的请求委托? 什么是ASP.NET Core中的Use和Run方法? 什么是 UseDeveloperExceptionPage 中间件组件? 怎样使用扩展方法Run,来配置中间件组件? 什么是扩展方法? 怎样在ASP.NET Core中配置中间件组件 在前面的文章中,我们已经知道,我们需要在Startup类文件中的Startup类中的Configure方法内,来配置中间件组件。我们打开之前创建的空模板的ASP.NET Core项目,可以看到项目默认有一个Configure方法: 什么是ASP.NET Core中的请求委托? 在ASP.NET Core中,请求委托被用来构建请求管道,也就是请求委托用来处理每一个即将从客户端发来的请求。在ASP.NET Core中,你可以使用Run、Map、以及Use扩展方法来配置请求委托。你可以使用,匿名的内联方法,来指定一个请求委托(这叫做内联中间件),或者你可以使用一个可以重复使用的类,来指定请求委托

WPF实现消息提醒(广告弹窗)

£可爱£侵袭症+ 提交于 2020-04-09 01:02:46
1.先上效果图: 2.1t提示框界面。 主窗口界面没什么内容,就放了一个触发按钮。先绘制通知窗口(一个关闭按钮,俩个文本控件),可以设置下ResizeMode="NoResize" WindowStyle="None" Topmost="True", 去掉窗口标题,并使提示窗口始终处于最上层。 <Border BorderThickness= " 1 " BorderBrush= " Black " > <Grid> <Grid.RowDefinitions> <RowDefinition Height= " 6* " /> <RowDefinition /> </Grid.RowDefinitions> <Grid Background= " White " > < Button Margin = " 5 " HorizontalAlignment = " Right " VerticalAlignment = " Top " Background = " White " BorderThickness = " 0 " Click = " Button_Click " Content = " × " FontSize = " 18 " /> < TextBlock x:Name = " tbTitle " Margin = " 5 " HorizontalAlignment =

如何用DirectShow替代付费的摄像头SDK

雨燕双飞 提交于 2020-04-08 17:35:04
Dynamsoft Barcode SDK安装包里自带了一个功能强大的扫码Demo,这个Demo支持的条形码扫描功能包括文件读取,扫描仪图像读取,以及摄像头视频流读取。 然而扫描仪和摄像头的调用功能并不是免费的,需要用到Dynamic .NET TWAIN这个商用SDK。这篇文章分享下如何去掉扫描仪功能,并把Webcam调用接口替换成DirectShow。 Windows桌面条形码扫描应用 安装Dynamsoft Barcode Reader之后,找到工程 <Dynamsoft Barcode Reader>\Samples\Desktop\C#\BarcodeReaderDemo ,并导入 Visual Studio 。 这个工程依赖的DLL包括Dynamsoft.BarcodeReader.dll, Dynamsoft.ImageCore.dll,Dynamsoft.Forms.Viewer.dll, Dynamsoft.Camera.dll,Dynamsoft.PDF.dll,Dynamsoft.Twain.dll。 扫码工程修改 去掉扫描仪和摄像头依赖的DLL:Dynamsoft.Camera.dll, Dynamsoft.PDF.dll ,Dynamsoft.Twain.dll。 在 App.config 文件中去掉 key ="DNTLicense" value =

聊聊Elasticsearch的AtomicArray

耗尽温柔 提交于 2020-04-06 22:36:50
序 本文主要研究一下Elasticsearch的AtomicArray AtomicArray elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/common/util/concurrent/AtomicArray.java public class AtomicArray<E> { private final AtomicReferenceArray<E> array; private volatile List<E> nonNullList; public AtomicArray(int size) { array = new AtomicReferenceArray<>(size); } /** * The size of the expected results, including potential null values. */ public int length() { return array.length(); } /** * Sets the element at position {@code i} to the given value. * * @param i the index * @param value the new value */ public void set(int i,