2011-10-27 20 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(new InvalidateFromSepThreadDel())> TailGraph.Invalidate()));を試してください。 –

+1

これは例外を生成すべきではありません。別のスレッドからControl.Invalidate()を呼び出すことがサポートされています。 WindowsとWinformsの両方で。実際にInvalidate(true)を呼び出さなかったことを確認してください。 –

答えて

1

Invokeコントロール(Invokeメソッドが使用されている人)が作成されたを作成します。 他のコントロールも上記のスレッドで作成されていることを確認してください。で始まる1つのコントロールが「間違ったスレッド」に作成されていないことを確認してください。適切でないかもしれない - Invokeには標的が指定されていないので

また、それが含むオブジェクト/クラスのthis.Invokeであろう。コーディング

(または、ハサン・カーンが指摘したように、WinFormsのタイマーを考え...常にその場合には、タイマーが作成されたスレッドで実行されるコールバック。)

ハッピー。

関連する問題