Delegate(代理)异常:该委托必须有一个目标
在代理调用BeginInvoke(new AsyncCallback(callBack), null);时,会抛这个异常的原因是该代理变量代理了一个以上的方法.
解决方法
Ⅰ.可以通过事件将这些方法打包在一起(假设打包的方法为AXPatch),然后再用代理调用这个打包的方法AXPatch().
/// <summary>
/// 异步发送下行消息。
/// </summary>
/// <param name="msg">下行消息</param>
public void Send(Message.CmppSubmit message)
{
try
{
CmppSubmitHandler handler = new CmppSubmitHandler(this.SendInternal); handler.BeginInvoke(message,new AsyncCallback(this.SendCallback),message); }
catch(Exception ex)
{
Sinosky.Diagnostics.EventLog.WriteEntry(this,ex);
}
} private void SendInternal(Message.CmppSubmit message)
{
try
{
if(this.SubmitDispatched!=null)
{
this.SubmitDispatched(message);
}
else
{
Console.WriteLine("\n^^^^Throw " + message.ToString());
}
}
catch(Exception e)
{
Sinosky.Diagnostics.EventLog.WriteEntry(this,e);
}
} private void SendCallback(System.IAsyncResult ar)
{
Message.CmppSubmit message = ar.AsyncState as Message.CmppSubmit; #if DEBUG
if(message!=null)
{
Console.WriteLine("\n<<<<Dispatch " + message.ToString());
}
#endif
}
Ⅱ.直接全部罗列要执行的方法到一个方法里(假设打包的方法为AXPatch),然后再用代理调用这个打包的方法【AXPatch()】.
通过事件处理的方法Ⅰ是异步进行的.不确定中......
经测试,方法Ⅰ是同步进行的,按照订阅事件的先后顺序执行.这个顺序不是随机的.
在.NET框架中,C#语言使用委托以及事件,可以很好的实现观察者模式。委托相当于“订阅清单”的角色,当目标中关联了该委托的事件被触发时,则委托将自动按序执行观察者注册于委托中的方法。
方法Ⅱ通俗易懂.
参考文章
对于事件不能调用BeginInvoke,可改用另外一层包装 , 感觉写的不是很详细.
浅谈Observer Pattern(观察者模式)及其在C#中的实现
Delegate(代理)异常:该委托必须有一个目标的更多相关文章
- c# 关键字delegate、event(委托与事件)[MSDN原文摘录][1]
A delegate is a type that safely encapsulates a method, similar to a function pointer in C and C++. ...
- View 与 Controller 之间的delegate(代理)传值
这个代理传值是经常使用的一种传值方式,下面介绍一种View 和 Controller 之间的代理传值方法. 先建立一个View视图 如 LoginView 是继承于一个UIView 在LoginVie ...
- iOS阶段学习第30天笔记( UIViewController—Delegate(代理) )
iOS学习(UI)知识点整理 一.UIViewController的介绍 1)概念:UIViewController 即视图控制器,用来管理和控制页面跳转的一个类 ,iOS里面采用了MVC的体系结构, ...
- JavaScript事件代理和事件委托
一.概述: 那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的 ...
- 使用VAE、CNN encoder+孤立森林检测ssl加密异常流的初探——真是一个忧伤的故事!!!
ssl payload取1024字节,然后使用VAE检测异常的ssl流. 代码如下: from sklearn.model_selection import train_test_split from ...
- System.Reflection.TargetException:“非静态方法需要一个目标。”
报错:TargetException, 非静态方法需要一个目标,非静态方法 如果实例为null,调用实例方法会报如上错. 解决办法: 检查实例是否为null,考虑什么情况下实例为null,然后排除实例 ...
- 把一个整体目标设置成多个分阶段目标,完成了一个目标后,就相当于一件事OVER
如果事情有变坏的可能,不管这种可能性有多小,它总会发生 . 一.任何事都没有表面看起来那么简单:二.所有的事都会比你预计的时间长:三.会出错的事总会出错:四.如果你担心某种情况发生,那么它就一定会发生 ...
- iOS delegate, 代理/委托与协议.
之前知知道iOS协议怎么写, 以为真的跟特么java接口一样, 后来发现完全不是. 首先, 说说应用场景, 就是当你要用一个程序类, 或者说逻辑类, 去控制一个storyboard里面的label, ...
- ios 页面传值4种方式(四) 之通过delegate(代理)
这是ios里最常用的设计模式了,简直贯穿了整个cocoa touch框架.废话不多说,直接上代码: 场景是: A--打开--B; B里输入数值,点击--返回--A; A里显示B输入的值; △在开始写之 ...
随机推荐
- Android中的按键顺序打乱
首先要找到相对应的控件,之后再来一个数组,再把数组里面的数字显示到控件上面. private void initView() { mNum0 = (Button) findViewById(R.id. ...
- 可能是 BJOI2019 Day1 题解?
T1 给一个有空白字符的串 $S$,和若干模板串 $X_i$,初始 $Ans = 1$,每当一个模板串在 $S$ 中作为子串出现时,$Ans$ 会乘以 $X_i$ 的权值 $Val_i$,然后如果 $ ...
- 深度优先搜索入门:POJ1164城堡问题(递归、用栈模拟递归)
将问题的各状态之间的转移关系描述为一个图,则深度优先搜索遍历整个图的框架为:Dfs(v) {if( v 访问过)return;将v标记为访问过;对和v相邻的每个点u: Dfs(u);}int main ...
- Jmeter-ForEach控制器
ForEach Controller需要配合‘用户定义的变量’来使用,作用是参数化 名称:字面意思,ForEach Controller的名称 注释:字面意思 输入变量前缀:变量的前缀:如要使用的变量 ...
- Bezier曲线原理—动态解释
公式线性公式给定点P0.P1,线性贝兹曲线只是一条两点之间的直线.且其等同于线性插值.这条线由下式给出: 一阶贝赛尔曲线上的由两个点确定 P0 和P1,当t在0--->1区间上递增时,根据此会得 ...
- JanusGraph Server配置
转自:https://www.cnblogs.com/jiyuqi/p/320267ff0b5052fad4613945e58ea1f1.html JanusGraph使用Gremlin Server ...
- python(十一)、线程
一.基本概念 进程是资源分配的基本单位,而线程则是CPU调度和分派的基本单位.系统需要执行创建进程.撤销进程和进程切换等任务,但创建进程开销大限制了并发的提高.因此,成百上千个进程会造成内存浪费,并且 ...
- 《DSP using MATLAB》示例Example 8.8
%% ------------------------------------------------------------------------ %% Output Info about thi ...
- 《DSP using MATLAB》示例Example7.14
代码: M = 20; alpha = (M-1)/2; l = 0:M-1; wl = (2*pi/M)*l; Hrs = [1, 1, 1, zeros(1, 15), 1, 1]; % Idea ...
- LeetCode 773. Sliding Puzzle
原题链接在这里:https://leetcode.com/problems/sliding-puzzle/description/ 题目: On a 2x3 board, there are 5 ti ...