한번은 원격을 사용하는 시스템을 배포하고 서버는 클라이언트가 가입 할 수있는 몇 가지 이벤트를 시작했습니다.
가능하게하려면 typeFilterLevel을 full로 설정해야하며 클라이언트와 서버에서 알려진 '중간'개체를 만들어야만 해당 개체를 처리 할 수 있습니다. 이벤트.
예 : 클라이언트 측 서버 &에 알려진 클래스입니다. 클라이언트 측에서
public abstract class MyDelegateObject : MarshalByRefObject
{
public void EventHandlerCallback(object sender, EventArgs e)
{
EventHandlerCallbackCore(sender, e);
}
protected abstract void EventHandlerCallbackCore(object sender, EventArgs e);
public override object InitializeLifetimeService() { return null; }
}
, 당신은 위의 클래스에서 상속, 이벤트가 발생할 때 수행해야하는 실제 로직을 구현하는 다른 클래스를 만듭니다.
public class MyConcreteHandler : MyDelegateObject
{
protected override EventHandlerCallbackCore(object sender, EventArgs e)
{
// do some stuff
}
}
당신은 단순히 같은 원격 객체의 이벤트에 이벤트 핸들러를 첨부 : 당신이 당신의 핸들러 클래스의 WinForm 컨트롤을 업데이트 할 경우
MyConcreteHandler handler = new MyConcreteHandler();
myRemoteObject.MyEventOccured += new EventHandler(handler.EventHandlerCallback);
Offcourse, 그 클래스는 ISynchronizeInvoke을 구현해야합니다.