2011-10-27 49 views
2

我需要一些幫助修復跨線程異常。我使用調用它通常可以解決這個問題,但由於某種原因它不工作呢:修復跨線程異常

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

引發異常的調用:

$異常{「跨線程操作無效:控制「XTailGraph」 從除了它是在創建 的線程以外的線程訪問「} {的System.Exception} System.InvalidOperationException

+3

使用Forms.Timer –

+3

嘗試TailGraph.Invoke(新InvalidateFromSepThreadDel(()=> TailGraph.Invalidate())); –

+1

這不應該產生該異常,支持從另一個線程調用Control.Invalidate()。無論是由Windows和Winforms。確保你沒有真正調用Invalidate(true)。 –

回答

1

Invoke將編組回噸hread 控制(正在使用Invoke方法的人)已創建。確保在所述線程上也創建了其他控件 - 即確保沒有在「錯誤的線程」上創建一個控件,以開頭。

另外,由於沒有目標Invoke指定那麼這將是包含對象/類的this.Invoke - 這可能不適合。

(或者哈桑·汗指出,考慮的WinForms定時器......回調總是會在計時器上創建的線程中運行,在這種情況下)。

編碼愉快。