2011-12-13 65 views
4

难道由于GC释放资源而不会调用'completed'事件处理程序吗?C#中的事件注册范围

public void StartVideo(WerCamera camera) 
    { 
     Credential creadential = new Credential() { Email = CurrentUser.Email, Password = CurrentUser.Password, SessionNumber = SessionNumber}; 
     CommandsClient client = new CommandsClient(); 
     client.StartVideoCompleted += client_StartVideoCompleted; 
     client.StartVideoAsync(int.Parse(camera.Id), creadential, ClientInfo); 

     client.CloseAsync(); 
    } 

回答

2

是的,这是可能的,因为你失去所有引用到客户端一旦函数返回。

client.StartVideoCompleted += client_StartVideoCompleted;最终以client_StartVideoCompleted函数持有对该对象的引用,但是没有互换。您需要以某种方式保留对创建的客户端的引用。

+0

谢谢,那么调用WCF服务(CommandsClient)并注册其事件的最佳做法是什么?谢谢,janiv。 – janiv

+0

我并没有真正使用wcf,但给了你发布的代码片段,我可能会在该类中有一个List 字段。在退出该函数之前,将每个新命令添加到列表中,然后从client_StartVideoCompleted中的列表中删除该命令。如果事件正在与creatin不同的线程中调用,则可能需要锁定对列表的访问权限 - 只需注意一些事项。 –