2011-07-19 7 views
0

私はC#でチャットアプリケーションを開発しており、新しい要求とゾーン要求のデータを頻繁に取得するためにSystem.Timer.Timerを使用しています。フォームオブジェクトでのinvokeメソッドの問題#

これはうまくいきますが、新しいインスタンスを作成するたびに、クロススレッド操作の例外が発生します。

これは私のコードです:

frmchat f = new frmchat(); 
MethodInvoker method = new MethodInvoker(delegate() 
{ 
    f.Name = "xyz";f.Show(); 
}); 
if (f.InvokeRequired) 
{ 
    f.Invoke(method); 
} 
else 
{ 
    method(); 
} 

これは、チャット形式の番号を作成します。

答えて

0

あなたはそのタイマーの経過イベントハンドラでそのフォームを作成する場合は、次にように、代わりにthis.Invokeを使用します。私はrunnig罰金window.forms.timer使用しますが、私のUIが時に応答しない場合はい

this.Invoke(new MethodInvoker(() => 
{ 
    frmchat f = new frmchat(); 
    f.Name = "xyz"; 
    f.Show(); 
} 
+0

ありがとうございましたyar私の問題は解決されました。あなたは非常にマッシュアップします。 –

+0

@mayur:あなたは歓迎です:) –

1

私はあなたの問題を推測していますが、新しいフォームはUIスレッドでしか作成できません。可能であればWindows.Forms.Timerを使用してください。これにより、自動的に正しいスレッド上のイベントが再呼び出しされます。

+0

タイマー間のコードはrunning.thatsなぜ私はこれを何かをしてください使用しています。 –

+1

Control.Invoke()を使用してそれを修正するつもりはありません。呼び出しターゲットは、タイマーのTickイベントが実行されないのと同じ理由で実行されません。それが何であれ、本当の問題を修正してください。 –

+0

私はtimerelapseイベントでフォームを開いてから、me.oneをどうぞお送りください。 –

関連する問題