7
라이브러리 클래스에서 일련의 이벤트를 발생시키고 싶지만 일부 이벤트 구독자가 무례하고 일부 이벤트를 처리하는 데 시간이 오래 걸려서 이벤트를 발생시키는 스레드를 차단할 수 있습니다. 나는 각 이벤트 인상 스레드 풀 스레드를 사용하여 모금 스레드를 보호 할 수 있다고 생각 : 이벤트에 하나의 가입자가있을 때BeginInvoke를 MulticastDelegate와 함께 사용할 수 있습니까?
if (packet != null && DataPacketReceived != null)
{
var args = new DataPacketEventArgs(packet);
DataPacketReceived.BeginInvoke(this, args, null, null);
}
잘 작동하지만 곧 두 번째 가입자가 도착하는대로, DataPacketReceived
가된다 멀티 캐스트 대리자를 사용하고 "대리자는 하나의 대상 만 가져야합니다."라는 오류 메시지와 함께 인수 예외가 발생합니다. 별도의 스레드에서 이벤트를 발생시키는 쉬운 방법이 있습니까? 아니면 스레드를 시작한 다음 거기에서 이벤트를 발생시켜야합니까?
수정하지만, 각 가입자에'BeginInvoke'를 호출하면 반드시 각각 별도의 스레드에서 실행되는 것을 의미하지 않습니다 : 내 시나리오를 위해, 나는 별도의 스레드에서 각 가입자에 대한 이벤트를 인상하기로 결정했습니다. 스레드 풀의 비즈니스입니다. – Ani
지난 며칠 동안이 문제를 몇 번 살펴 봤습니다. '리시버'의 객체가 실제로 EventHandler 유형이 아니라는 점에 유의해야합니다. 이는 명시 적 캐스트입니다. –