2009-10-13 1 views
0

커스텀 임베디드 하드웨어로 모든 TCP/IP 통신을 처리하는 라이브러리를 작성했습니다. 우리 회사의 대부분의 소프트웨어와 함께 사용되며 향후에는 별도로 판매 될 수 있습니다.내 외부 라이브러리에서 모든 이벤트를 호출하지 않으려면 어떻게합니까?

가장 귀찮은 점은 라이브러리에서 이벤트를 처리 할 때마다 호출 할 별도의 함수가 있어야한다는 것입니다. 나는 단지 이것을하는 더 쉬운 방법이 있다는 것을 단지 상상할 수있다. 나는 단지 모른다. ...

어떤 아이디어라도?

public Setup(DiscoveryReader reader) 
    { 
     download = new DownloadFilesIndividual(Reader.ip, DateTime.Today); 
     download.OnDownloadStatus += new DownloadStatusHandler(download_OnDownloadStatus); 
    } 

    void download_OnDownloadStatus(DownloadStatus status) 
    { 
     Invoke(new DownloadStatusHandler(this.safe_download_OnDownloadStatus), new object[] { status }); 
    } 

    void safe_download_OnDownloadStatus(DownloadStatus status) 
    { 
     // Do UI stuff here 
    } 
+0

이 작업을 수행하는 정확한 이유는 무엇 구문 설탕? 'safe_download'는 실제로 얼마나 "안전"합니까? –

+0

아, 알겠습니다. "UI 물건", ㅎ. –

+0

라이브러리가 다른 스레드에서 tcp 항목을 실행 중이기 때문에 호출이 필요합니다. 그런 다음 tcp 스레드는 직접 양식을 조작 할 수없는 이벤트를 시작합니다. safe_download는 실제로 더 안전하지 않습니다. 그 단어는 처음에 추가하는 습관을 가졌습니다. – Tim

답변

1

public Setup(DiscoveryReader reader) 
{ 
    download = new DownloadFilesIndividual(Reader.ip, DateTime.Today); 
    download.OnDownloadStatus += new DownloadStatusHandler(download_OnDownloadStatus); 
} 

void download_OnDownloadStatus(DownloadStatus status) 
{ 
    if(InvokeRequired) 
    { 
    Invoke(new Action<DownloadStatus>(download_OnDownloadStatus),status); 
    } else { 
    // Do UI stuff here 
    } 
} 
+0

나는 이것을 좋아합니다! 나는 행동에 대해 알지 못했다 . 내가 어떻게 든 라이브러리에 호출을 포함시킬 수 있다면 좋겠지 만 가능한 것은 확실하지 않습니다! – Tim

+0

"Invoke (새 작업 (download_OnDownloadStatus, status));"이유는 무엇입니까? "오류 - 메소드 이름 예상" – Tim

+0

작업 완료 : 호출 (새 작업 (download_OnDownloadStatus), 상태); – Tim