나는 당신을 올바르게 이해합니다. 이 클래스는 설명하기 위해 SocketAsyncEventArgs를 사용하는 알려지지 않은 myvm 클래스를 래핑합니다. 물론 SocketAsyncEventArgs 클래스의 소스 코드가 없습니다.
그리고 SocketAsyncEventArgs 클래스의 Completed 이벤트를 래핑했습니다. 해당 이벤트가 트리거되면 _instance_Completed가 실행되고 _myvm 이벤트가 발생합니다. 그래서 우리가해야 할 일은 _myvm 이벤트를 구독/탈퇴하는 것입니다.
는 그럼 난/가입 탈퇴로, 대표 그러므로 당신이 호출 ClearEvents() 메소드에 의해 을 취소 할 수있는 목록에 저장되어, 가입하는 사람/탈퇴 _myvm 이벤트에 대한 이벤트를 둡니다.
희망이 있으면 도움이 될 것입니다.
public class WrapperClass
{
private EventHandler<SocketAsyncEventArgs> _myEvent;
private SocketAsyncEventArgs _myvm;
private List<Delegate> delegates;
public WrapperClass()
{
delegates = new List<Delegate>();
}
public void SetInstance(SocketAsyncEventArgs myvm)
{
_myvm = myvm;
_myvm.Completed += new EventHandler<SocketAsyncEventArgs>(_instance_Completed);
}
private void _instance_Completed(object sender, SocketAsyncEventArgs e)
{
if (_myEvent != null)
{
_myEvent(sender, e);
}
}
public event EventHandler<SocketAsyncEventArgs> myEvent
{
add
{
delegates.Add(value);
_myEvent = (EventHandler<SocketAsyncEventArgs>)Delegate.Combine(_myEvent, value);
}
remove
{
delegates.Remove(value);
_myEvent = (EventHandler<SocketAsyncEventArgs>)Delegate.Remove(_myEvent, value);
}
}
public void ClearEvents()
{
foreach (var d in delegates)
{
_myEvent = (EventHandler<SocketAsyncEventArgs>)Delegate.Remove(_myEvent, d);
}
}
}
릴리스하려는 이벤트 핸들러 또는 myvm은 무엇입니까? – CrazyCasta