2011-10-27 4 views
2

크로스 스레드 예외 수정에 도움이 필요합니다. 나는 보통이 문제를 해결 호출을 사용하고 있지만, 몇 가지 이유가 wokring되지 않습니다크로스 스레드 예외 수정

void paintTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    Invoke(new InvalidateFromSepThreadDel(InvalidateFromSepThread)); 
} 
delegate void InvalidateFromSepThreadDel(); 
void InvalidateFromSepThread() 
{ 
    TailGraph.Invalidate(); 
} 

예외는 호출에 발생합니다 :

$ 예외 { "잘못된 크로스 스레드 작업 :. t을 다시 마샬링됩니다 제어 'XTailGraph' 가에 을 만들어진 스레드가 아닌 다른 스레드에서 액세스 "} System.Exception {System.InvalidOperationException}

+3

Forms.Timer를 사용하십시오. –

+3

TailGraph.Invoke (새로운 InvalidateFromSepThreadDel (() => TailGraph.Invalidate()))를 시도해보십시오. –

+1

다른 스레드에서 Control.Invalidate()를 호출하면 예외가 발생하지 않습니다. Windows와 Winforms 모두. 실제로 무효화 (true)를 호출하지 않았는지 확인하십시오. –

답변

1

Invoke href 컨트롤이 (Invoke 메서드가 사용되는 사람)이 만들어졌습니다. 다른 컨트롤도 해당 스레드에서 생성되었는지 확인하십시오. 즉, 으로 시작하는 하나의 컨트롤이 "잘못된 스레드"에 만들어지지 않았는지 확인하십시오. 적절하지 않을 수도 있습니다 - Invoke에 대해 지정되지 않았 또한

, 대상 더 있기 때문에 그것은 포함하는 객체/클래스의 this.Invoke 될 것입니다. 코딩

(또는 하산 칸이 지적한 바와 같이 윈폼 타이머를 고려 ... 항상 그 경우, 타이머가 생성 된 스레드에서 실행되는 콜백.)

해피.

관련 문제