对Delegate的误用及解决办法

      在开发Silverligh程式的时候,发现了一个问题。

      先看一段代码:目的很简单,就是在执行查询的时候进行异步处理。

Code

 

      结果发现:在执行第n次查询的时候 MessageBox.Show("Done...");会执行n次.

      原因:这里定义了一个公有的
      ISDApp01Xml.SDApp01XmlSoapClient client = new ISDApp01Xml.SDApp01XmlSoapClient();而后在查询动作时候,为ExecuteQueryCompleted事件添加执行方法,注意到这里用的是典型的多播委托的方式“+=”,也就是说,每执行一次查询,就为此事件添加一个同样的执行方法,从而造成在执行第n次查询的时候,实际上方法执行了n次。   
      解决:
      (1)把service进行私有实例化:在用到的时候再进行实例化,出了作用域,自动“释放”。
      (2)service公有,单是委托方法只能加载一次.
     1.

Code

  2.

Code

 

你可能感兴趣的:(delegate)