前天调试自己的一段代码,总是出错,用断点单步调试,发现执行完一个直接调用api的方法就出错了,加try-catch捕获不到,每次都是弹出窗口,提示“未将对象引用到实例”。为了这个错误,调了一个下午,结果公司的一位高手帮我调试,马上就指出了问题所在,那就是因为出错的方法执行完之后,api要执行回调函数,但是我的委托对象是作为局部变量注册到api中的,结果api调用的时候已经被释放了,结果就造成了空应用的错误。下面贴出错误的代码。
/**/
/// <summary>
/// 注册车牌识别事件
/// </summary>
private void RegistEvent()
... {
CallbackFlagFuc FlagFuc = new CallbackFlagFuc(this.ReceiveFlag);
CallbackPlateFuc PlateFuc = new CallbackPlateFuc(this.ReceivePlate);
CallbackSmallImgFuc SmallImgFuc = new CallbackSmallImgFuc(this.RecevieSmallImg);
CallbackPlateImgFuc PlateImgFuc = new CallbackPlateImgFuc(this.ReceviePlateImg);
CallbackBigImgFuc BigImgFuc = new CallbackBigImgFuc(this.RecevieBigImg);
RegisterFlagEvent(FlagFuc);
RegisterPlateEvent(PlateFuc);
RegisterSmallImgEvent(SmallImgFuc);
RegisterPlateImgEvent(PlateImgFuc);
RegisterBigImgEvent(BigImgFuc);
}
/// 注册车牌识别事件
/// </summary>
private void RegistEvent()
... {
CallbackFlagFuc FlagFuc = new CallbackFlagFuc(this.ReceiveFlag);
CallbackPlateFuc PlateFuc = new CallbackPlateFuc(this.ReceivePlate);
CallbackSmallImgFuc SmallImgFuc = new CallbackSmallImgFuc(this.RecevieSmallImg);
CallbackPlateImgFuc PlateImgFuc = new CallbackPlateImgFuc(this.ReceviePlateImg);
CallbackBigImgFuc BigImgFuc = new CallbackBigImgFuc(this.RecevieBigImg);
RegisterFlagEvent(FlagFuc);
RegisterPlateEvent(PlateFuc);
RegisterSmallImgEvent(SmallImgFuc);
RegisterPlateImgEvent(PlateImgFuc);
RegisterBigImgEvent(BigImgFuc);
}
修改后的代码如下:
/// <summary>
/// 注册车牌识别事件
/// </summary>
private void RegistEvent()
{
RegisterFlagEvent(FlagFuc);
RegisterPlateEvent(PlateFuc);
RegisterSmallImgEvent(SmallImgFuc);
RegisterPlateImgEvent(PlateImgFuc);
RegisterBigImgEvent(BigImgFuc);
}
把委托对象作为类的成员变量保存就可以了。