2012-10-17 2 views
0

매우 근사한 (내가 근본적으로 뭔가를 놓치고 있는지 궁금해하는 것 같아 보이지만) 나는이 모든 아침에 막혔다. 클래스에 다음 코드가 있습니다.디스패처로부터 대리인을 불러 내기

public class myClass 
{ 
     private Dispatcher m_Dispatcher; 

     private void myMethod() { ... } 

     private void invokeTheMethod(object sender, PropertyChangedEventArgs e) 
     { 
      m_Dispatcher.Invoke(myMethod); //XYZ 
     } 

} 

Dispatcher는 myClass 인스턴스가 실행되고있는 스레드에 연결되어 있습니다. invokeTheMethod 메서드는 다른 스레드에서 호출되며 m_Dispatcher 스레드에서 myMethod를 실행하고 싶습니다. 그러나이 코드를 실행하려고하면 "개체 참조가 아닌 개체 참조"라는 XYZ 예외가 발생합니다. 이것은 위임자의 형태로 myMethod를 선언하지 않았기 때문입니까? - myMethod를 대리자로 선언하는 여러 가지 방법을 시도했지만 컴파일 할 수는 없습니다. 어떤 제안이라도 대단히 감사합니다.

덕분에, 크리스

답변

0

오류는 객체 (NullReferenceException이)

필드 m_Dispatcher을 의미의

개체 참조하지 인스턴스를 얻을. null입니다. 그래서 Invoke 메서드를 호출 할 수 없습니다.

"스레드에 연결된"Dispatcher의 인스턴스가 있더라도 myClass이 해당 인스턴스를 보유 할 수있는 방법이 없습니다.

myClass 인스턴스를 만들 때 Dispatcher의 인스턴스를 myClass에 제공하면됩니다. 이런 식으로 뭔가 : 보조 노트로

public class myClass 
{ 
    // Here is the 'injection' of the instance in the constructor of this class 
    public myClass(Dispatcher dispatcher) { 
    m_Dispatcher = dispatcher; 
    } 

    private Dispatcher m_Dispatcher; 

    private void myMethod() { ... } 

    private void invokeTheMethod(object sender, PropertyChangedEventArgs e) 
    { 
     m_Dispatcher.Invoke(myMethod); //XYZ 
    } 
} 

, 당신은 당신의 케이스가 C#을 개발 커뮤니티의 대다수에 의해 잘못 생각대로 코딩 규칙 일부를 읽어야합니다. 여기에 좋은 시작입니다 : http://msdn.microsoft.com/en-us/library/vstudio/w2a9a9s3.aspx

+0

안녕하세요, 감사합니다! 매우 당혹 스럽네요. 저는 이미 디스패처를 초기화했다고 생각했습니다. (생성자 코드의 생략은 의도적이었습니다). 아직도, 나는 당신이 고통의 몇 시간 나를 구했다고 생각합니다) –

관련 문제