2011-12-16 2 views
0

우리는 프로젝트를 처리하기 위해 C#에서 VB로 응용 프로그램을 마이그레이션하지만 VB에서 이벤트 처리 문제가 발생했습니다.Silverlight VB AddHandler to dynamic objects

응용 프로그램은 COM 래퍼를 사용하여 Silverlight에서 스캐너에 액세스합니다. 객체는 코드에서 동적으로 생성되고 이벤트는 "AcquirePage"에 추가됩니다. 이것은 물론 높은 신뢰를 필요로합니다. C#에서

코드 : VB에서 동적의 유일한 진짜 "해당"으로

dynamic TwainSession; 
(...) 
TwainSession.AcquirePage += new AcquirePageDelegate(AcquirePageEventHandler); 

객체, 우리는 사용

Private TwainSession As Object 

모든이 시점까지 괜찮습니다 이 Object의 이벤트를 처리하려고합니다. 우리는 Silverlight에 있기 때문에 Object의 구조 나 이벤트를 알 수 없으므로 동적으로 만들 필요가 있습니다. VB에서

AddHandler TwainSession.AcquirePage, AddressOf AcquirePageEventHandler 

가 제공

: 'AcquirePage가'객체 '

어떤 방법의 이벤트 아닌 C#에서 우리는 단순히 "+ ="이벤트에 처리기를 추가 만하는 데 사용 그 주위?

+0

흥미로운 질문이지만 명확한 설명이 필요합니다. 누군가를 문제를 복제 할 수 있도록 조금 확장하고 배경을 채울 수 있습니까? –

답변

0

, 우리가 그것에 대해 이런 식으로 갔다 VB에서이 작업을 수행 할 수있는 솔루션을 찾을 수 없습니다 :

  1. 추가 된 새 프로젝트 : 실버 라이트 C# 클래스 라이브러리
  2. 생성자를 동적 객체와 이벤트 핸들러의 주소라는 두 개의 인수를 취하여 처리기를 추가하는 C# 메서드를 수행합니다.

    public TwainHandler (dynamic twainSession, Delegate eventHandler) { twainSession.AcquirePage + = eventHandler; }

  3. C# 라이브러리가 빌드되었고 dll이 VB 프로젝트에 대한 참조로 추가되었습니다.

    같은

    어둡게 t TwainHandler = 뉴 TwainHandler (TwainSession 뉴 AcquirePageDelegate (AddressOf를 AcquirePageEventHandler))

는 C# 라이브러리 (로모 VB 애플리케이션에 방법을 가리키는) 이벤트에 대한 핸들러를 추가하는이 방법 동적으로 누구든지 더 나은 해결책을 가지고 있다면 공유하십시오.

0

나는 대답은 꺼짐하지만 난 확신 할 수없는 문제를 재현 할 수없이 Option Strict컴파일하는 생각 .

참조 : Early and Late Binding

+0

답변 주셔서 감사합니다.하지만 문제는 동적 객체 (Dim x as Object)에 핸들러를 추가하는 방법이었습니다. C#은 다음을 사용하여 쉽게이 작업을 수행합니다. x.AnyEventName + = new eventDelegate (EventHandler) –