在开发Silverligh程式的时候,发现了一个问题。
先看一段代码:目的很简单,就是在执行查询的时候进行异步处理。
}
结果发现:在执行第n次查询的时候 MessageBox.Show("Done...");会执行n次.
原因:这里定义了一个公有的
ISDApp01Xml.SDApp01XmlSoapClient client = new ISDApp01Xml.SDApp01XmlSoapClient();而后在查询动作时候,为ExecuteQueryCompleted事件添加执行方法,注意到这里用的是典型的多播委托的方式“+=”,也就是说,每执行一次查询,就为此事件添加一个同样的执行方法,从而造成在执行第n次查询的时候,实际上方法执行了n次。
解决:
(1)把service进行私有实例化:在用到的时候再进行实例化,出了作用域,自动“释放”。
(2)service公有,单是委托方法只能加载一次.
1.
client.ExecuteQueryAsync(sql);
}
2.
}
}