2009-08-24 7 views
5

C#으로 이벤트 처리에 대한 질문이 있습니다. 나는 A 클래스가 던지는 사건을 경청한다. 이벤트가 던져지면 뭔가하는 메소드가 실행됩니다. 이 방법은 때로는 데이터 소스 또는 유사 기기로부터의 응답을 기다려야합니다.스레드 이벤트 처리 (C#)

나는 이벤트 처리가 동기이므로 다른 이벤트가 하나씩 처리 될 것이라고 생각합니다. 비동기로 만들 수 있습니까? 나는이 메소드가 실행될 때 데이터 소스의 응답을 기다려야 만한다는 것을 의미한다. 다른 이벤트는 처리 될 수 있는가? 사전에

덕분에

세바스찬

답변

11

난 당신이 새 스레드에서 대기해야하는 코드를 생성 할 수 있다고 가정합니다. 이로 인해 이벤트 핸들러가 이벤트가 발생하는 스레드를 차단하지 못하게되어 라인에서 다음 이벤트 핸들러를 호출 할 수 있습니다. (C# 3.5 샘플)

private void MyPotentiallyLongRunningEventHandler(object sender, SomeEventArgs e) 
{ 
    ThreadPool.QueueUserWorkItem((state) => { 
     // do something that potentially takes time 

     // do something to update state somewhere with the new data 
    }); 
} 
+0

인수 (SomeEventArgs)에 출력 매개 변수가 포함되어 있으면 어떨까요? 이 메서드는 출력 매개 변수가 계산 될 때까지 남을 수 없습니다 ... 관련 질문을 게시했습니다 : http://stackoverflow.com/questions/6453655/parallel-event-handling-in-c/6453701#6453701 –

2

단순 이벤트 핸들러에서 스레드를 생성하고 거기에 모든 로직을한다. 스레드 수를 제한하려면 스레드 풀을 사용하는 것이 좋습니다.

+0

스레드가 저렴하지 않으므로 이벤트 처리기에 대한 좋은 아이디어는 아닐 것이지만 스레드 풀을 사용할 수는 있습니다. –

+0

스레드 풀이 항상 미리 만들어진 스레드를 가지고 있다고 생각하지 않습니다. 처음에는 스레드를 생성 할 것이므로 어쨌든 비용을 지불 할 것입니다. – vava