delegate

[C#基础]c#中的BeginInvoke和EndEndInvoke

余生颓废 提交于 2021-02-12 15:25:36
摘要 异步这东西,真正用起来的时候,发现事情还是挺多的,最近在项目中用到了异步的知识,发现对它还是不了解,处理起来,走了不少弯路。觉得还是补一补还是很有必要的。 MSDN原文地址:https://msdn.microsoft.com/en-us/library/2e08f6yc(v=vs.110).aspx 正文 .Net framework可以让你异步调用任何方法。为达这样的目的,你可以定义一个与你要调用的方法的签名相同的委托。公共语言运行时将自动为该委托定义与签名相同的BeginInvok和EndInvoke方法。 异步委托调用BeginInvok和EndInvoke方法,但在.NET Compact Framework中并不支持。 BeginInvoke方法触发你的异步方法,它和你想要执行的异步方法有相同的参数。另外还有两个可选参数,第一个是AsyncCallback委托是异步完成的回调方法。第二个是用户自定义对象,该对象将传递到回调方法中。BeginInvoke立即返回并且不等待完成异步的调用(继续执行该下面的代码,不需要等待)。BeginInvoke返回IAsyncResult接口,可用于检测异步调用的过程。 通过EndInvoke方法检测异步调用的结果。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到它完成。EndInvoke参数包括out和ref参数。

报错 PBItemCollectionServicer connection

▼魔方 西西 提交于 2021-02-10 13:23:50
一般出现在qq/微信登录,分享不回调的情况。原生和友盟等集合sdk都有出现 以下三个方法都要写 ` (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation ` ` -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{ [QQApiInterface handleOpenURL:url delegate:self]; if (YES == [TencentOAuth CanHandleOpenURL:url]) { return [TencentOAuth HandleOpenURL:url]; } if(

【AFNetworking 分析】AFURLResponseSerialization

你。 提交于 2021-02-08 23:01:22
Pre AFNetworking分析版本:4.0.1 结构图 所有ResponseSerializer都实现了 AFURLResponseSerialization 协议 - (nullable id)responseObjectForResponse:(nullable NSURLResponse *)response data:(nullable NSData *)data error:(NSError * _Nullable __autoreleasing *)error NS_SWIFT_NOTHROW; 序列化类父类 AFHTTPResponseSerializer @interface AFHTTPResponseSerializer : NSObject <AFURLResponseSerialization> - (instancetype)init; + (instancetype)serializer; @property (nonatomic, copy, nullable) NSIndexSet *acceptableStatusCodes; @property (nonatomic, copy, nullable) NSSet <NSString *> *acceptableContentTypes; - (BOOL)validateResponse:

C#避免WinForm窗体假死

帅比萌擦擦* 提交于 2021-02-08 13:24:58
WinForm窗体在使用过程中如果因为程序等待时间太久而导致窗体本身假死无法控制,会严重影响用户的体验,这种情况大多是UI线程被耗时长的代码操作占用所致,可以新开一个线程用来完成耗时长的操作,然后再将结果返回到UI中呈现,这样就不会占用到UI线程了,也就不会假死了,涉及Control的更新需要用到BeginInvoke方法 private void button1_Click( object sender, EventArgs e) { Thread t1 = new Thread( delegate () { bu1_Click(); } ); t1.IsBackground = true ; //当主线程退出时,后台线程会被CLR调用Abort()来彻底终止程序 t1.Start(); } public void bu1_Click() { label1.BeginInvoke((MethodInvoker) delegate () { label1.Text = " Fetching doc effective date... " ; label1.ForeColor = Color.Red; });    Thread.Sleep(3000); } Control.BeginInvoke函数内的线程跟UI线程是同一个线程的,函数外的代码所在进程则是另一个t1进程

【AFNetworking 分析】POST 上传多表单类型数据

孤街浪徒 提交于 2021-02-06 20:34:21
[TOC] Pre AFNetworking分析版本:4.0.1 调试所用代码(AFNetworking demo iOS) XCTestExpectation *expectation = [self expectationWithDescription:@"Request should succeed"]; [self.sessionManager.requestSerializer setValue:@"default value" forHTTPHeaderField:@"field"]; [self.sessionManager POST:@"post" parameters:@{@"key":@"value"} headers:@{@"field":@"value"} constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { [formData appendPartWithFileData:[@"Data" dataUsingEncoding:NSUTF8StringEncoding] name:@"DataName" fileName:@"DataFileName" mimeType:@"data"]; } progress:nil success:^

C#中DllImport用法

回眸只為那壹抹淺笑 提交于 2021-02-06 10:30:15
http://blog.csdn.net/u011981242/article/details/52622923 http://www.jb51.net/article/46384.htm 读取身份证:https://www.cnblogs.com/softcg/p/6510984.html 析构函数:https://www.cnblogs.com/melao2006/p/4239302.html 命名空间: using System.Runtime.InteropServices; // 用 DllImport 需用此 命名空间 using System.Reflection; // 使用 Assembly 类需用此 命名空间 using System.Reflection.Emit; // 使用 ILGenerator 需用此 命名空间 /// <summary> /// 参数传递方式枚举 ,ByValue 表示值传递 ,ByRef 表示址传递 /// </summary> public enum ModePass { ByValue = 0x0001 , ByRef = 0x0002 } /// <summary> /// 动态加载非托管DLL(Dynamic Load DLL) /// </summary> public class DLD { /// <summary>

【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 定义事件类型

【iOS】图表实现-AAChartKit

孤者浪人 提交于 2021-02-03 11:04:44
昨天把AAChartKit和Charts整体描述了一下,讲了一下两个三方库的优缺点。今天就注重讲一下AAChartKit的使用。 0.简介 AAChartKit 项目,是 AAInfographics 的 Objective-C 语言版本,是在流行的开源前端图表框架 Highcharts 的基础上,封装的面向对象的,一组简单易用,极其精美的图表绘制控件. 特性: 1. 环境友好,兼容性强. 适配 iOS 6 +, 支持ARC,支持 Objective-C语言,配置简单.同时更有 Swift 版本AAInfographics可供使用. 2. 功能强大,类型多样. 支持柱状图 、条形图 、折线图 、曲线图 、折线填充图 、曲线填充图、雷达图、极地图、扇形图、气泡图、散点图、区域范围图、柱形范围图、面积范围图、面积范围均线图、直方折线图、直方折线填充图、箱线图、瀑布图、热力图、桑基图、金字塔图、漏斗图、等二十几种类型的图形,不可谓之不多. 3. 交互式图形动画. 有着清晰和充满细节的用户交互方式,与此同时,图形渲染动画效果细腻精致,流畅优美.有三十多种以上渲染动画效果可供选择,用户可自由设置渲染图形时的动画时间和动画类型,关于图形渲染动画类型,具体参见 AAChartKit 动画类型. 4. 支持手势缩放.支持图表的手势缩放和拖动阅览,手势缩放类型具体参见 AAChartKit

一文说通Dotnet的委托

我们两清 提交于 2021-01-30 12:16:32
简单的概念,也需要经常看看。   一、前言 先简单说说Delegate的由来。最早在C/C++中,有一个概念叫函数指针。其实就是一个内存指针,指向一个函数。调用函数时,只要调用函数指针就可以了,至于函数本身的实现,可以放在其它地方,也可以后实现。到了.Net,没有指针的概念了,但这种方式很实用,所以这个概念也保留了下来,形成了现在的委托Delegate。 另外,在.Net中,也把委托延伸了,与执行回调设计成了同一种机制,允许开发者定义回调的签名和类型。 当我们声明一个委托时,编译器会生成一个从MulticastDelegate派生的类。MulticastDelegate还包含几个方法,不过因为这些方法是CLR运行时动态生成的,代码IL中看不到,也不需要关心。   委托最大的特性是不需要进行强耦合。所以调用者其实并不知道所调用的是静态方法还是实例方法,也不知道具体调用的内容。举个常见的例子,UI编程中的按钮Button类。按钮类本身并不知道它的OnClick事件是如何处理的,也不需要知道。所以实际中,OnClick事件就是使用委托发布的。开发者在开发过程中实现OnClick事件的处理,并由UI订阅使用。 这种方式,就是委托对类的解耦。 二、简单委托 委托有一个非常简单的规则,就是:要引用的方法的返回类型或参数要与委托类型声明相匹配。 听着有点绕口,我们拿一个例子来说。 我们有一个方法

fastmybatis编写分表插件

那年仲夏 提交于 2021-01-28 17:49:31
fastmybatis 支持原生的插件,将写好的插件配置到mybatis配置文件中即可 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <plugins> <plugin interceptor="xxxxx.MyInterceptor" /> </plugins> </configuration> 这里演示编写一个分表插件 假设有4张分表,user_log0~3,记录用户的日志情况 user_log0 user_log1 user_log2 user_log3 现在需要动态查询指定到某一张表 首先生成对应的实体类,指定一张表生成,不用全部生成 /** * 表名:user_logX * %index% 占位符 */ @Table(name = "user_log%index%") public class UserLog { ... } 注意 %index% 占位符 Mapper不变 public interface UserLogMapper extends CrudMapper