2011-09-22 4 views
0

Error: The name 'Invoke' does not exist in the current contextControl.Invoke가 현재 컨텍스트에 존재하지 않습니다.

클래스에서 이미 기본 클래스가 있으므로 Windows.Forms.Control과 같은 것을 구현할 수 없습니다.

나는 here 문서를 보았지만 다른 인터페이스를 구현하고 싶지는 않으며 그 방법에 무엇을 넣을 지 모릅니다.

는 대부분의 UI 물건

편집 내가이

// On thread X 
Invoke((m_delegate)delegate(){ 
// Do something on main thread 
}); 
+1

코드를 표시 할 수 있습니까? –

+1

무엇을 묻고 있습니까? 사용자 정의 Invoke 메소드로 thread-affine 클래스를 구현하는 방법은 무엇입니까? 질문을 명확하게하십시오. –

+0

그 코드는 하나의 jot을 돕지 않습니다. 기본 클래스는 무엇입니까? –

답변

0

익명 메서드를 사용하여 Action 대리자를 사용하여 개체가 올바른 스레드로 전달 된 다음 실행되었습니다. 위대한 작품 및이 코드는 꽤 섹시한 찾으십시오.

1

같은 것을 할 노력하고있어 것 라이브러리에 액세스 할 수 없습니다, 그래서 이것은 상당히 낮은 수준의 C# 어댑터 프로그램입니다 당신이 당신의 코드에 대해 말한 것을 조금 말하지는 못하지만, 아마도 당신이 원하는 것을하기 위해 System.Threading.SynchronizationContext을 사용할 수 있습니다.

그냥 (이 개체를 구성하여 예를 들면) 당신의 UI 스레드 컨텍스트를 캡처해야하고 Control.InvokeSynchronizationContext.Post과 시뮬레이션 : BTW

class MyObj 
{ 
    SynchronizationContext _context; 

    // please Note: construct the Objects in your main/ui thread to caputure the 
    // right context 
    public MyObj() 
    { 
    CaptureCurrentContext(); 
    } 

    // or call this from your main/UI thread 
    public void CaptureCurrentContext() 
    { 
     _context = SynchronizationContext.Current; 
    } 

    public void MyInvoke(Action a) 
    { 
     _context.Post((SendOrPostCallback)(_ => a()), null); 
    } 
} 

: 여기 allmost에 Answer 아주 좋은 같은 질문 : Using SynchronizationContext for sending ...

+0

주 스레드에서 생성자를 호출하지 않으면 작동하지 않습니다. –

+0

@Hans 예, 언급했듯이 - 아마도 이것을 표시해야합니다 - 감사합니다. – Carsten

관련 문제