2013-08-19 4 views
2

환경 : MS SQL 서버, EF, WCF-RIA 서비스, Sliverlight이벤트 핸들러의 반환 값을 캡처하는 방법은 무엇입니까?

시도는 비동기 호출을위한 이벤트를 정의하는 것처럼 complete 이벤트 :

public event EventHandler<int> MySaveComplete; 

이의 이벤트가있는 SP를 호출하는 것입니다 DB에 저장하고 ID 값 (int)을 반환합니다.

하지만 시도는 코드를 컴파일 할 때와 같은 오류 메시지가 있어요 :

유형 'INT'이 제네릭 형식 또는 메서드 '은 System.EventHandler'의 형식 매개 변수 'TEventArgs'으로 사용 할 수 없습니다. 'int'에서 'System.EventArgs'로 복싱 변환이 없습니다.

이 문제를 해결하는 방법?

+0

이벤트를 사용하는 것은 여기에 표시되어 있지 않으므로 대신 콜백 메소드를 사용하십시오. AsyncCallback 인수는 SqlCommand.BeginExecuteXxx 메서드에서 확인하십시오. –

답변

2

EventHandler<T>은 일반 인수가 EventArgs 유형 (즉, 상속 된 유형)이어야합니다.

public class MySaveCompleteEventArgs : EventArgs 
{ 
    public MySaveCompleteEventArgs(int id) 
    { 
     ID = id; 
    } 

    public int ID { get; private set; } 
} 

을 그리고 EventHandler<T> 인수로 사용 : 그래서, 당신은 당신의 자신의 클래스를 작성해야합니다

protected void OnMySaveComplete(int id) 
{ 
    if (MySaveComplete == null) 
     return; 

    MySaveComplete(this, new MySaveCompleteEventArgs(id)); 
} 

당신은으로도 Action<int> 위임 사용할 수 있습니다

public event EventHandler<MySaveCompleteEventArgs> MySaveComplete; 

이벤트 제기 이벤트 유형.

+0

예. 감사. 이 사건에 대한 해결책은 무엇입니까? 나는 complete 이벤트에서 반환 값을 얻고 싶다. – KentZhou

+0

@KentZhou가 방금 솔루션으로 업데이트되었습니다. :) –

관련 문제