2011-07-11 7 views
2

誰かがInvokeを使用するための学習リソースへのリンクを持っていますか?Windowsフォームでの呼び出し

私は勉強しようとしていますが、私が見たすべての例は私の目的のためには適応できませんでした。

+1

あなたの目的をより具体的に示すのに役立ちます。 – gsharp

+0

申し訳ありませんが、私はシリアル接続を介してデバイスと通信するプログラムを書いています。現在、プログラムは入力が変わるまでコードセクションを実行しようとしますが、セクションはGUIスレッド上にあり、プログラムは変更に応答できません。私は、コードセクションを別のスレッドに入れ、Invokeを使ってアクセスする必要があると言われてきました。これが役に立ったら、 –

+0

あなたの質問をコメントに書き込むのではなく、次回更新してください。 – gsharp

答えて

7

あなたはMSDN Control.Invoke

は、私はちょうどControl.Invokeを実証するために少しのWinFormアプリケーションを書いてみました。 フォームが作成されたら、バックグラウンドスレッドで作業を開始します。その作業が完了したら、ラベル内のステータスを更新します。

public Form1() 
{ 
    InitializeComponent(); 
    //Do some work on a new thread 
    Thread backgroundThread = new Thread(BackgroundWork); 
    backgroundThread.Start(); 
}   

private void BackgroundWork() 
{ 
    int counter = 0; 
    while (counter < 5) 
    { 
     counter++; 
     Thread.Sleep(50); 
    } 

    DoWorkOnUI(); 
} 

private void DoWorkOnUI() 
{ 
    MethodInvoker methodInvokerDelegate = delegate()  
       { label1.Text = "Updated From UI"; }; 

    //This will be true if Current thread is not UI thread. 
    if (this.InvokeRequired) 
     this.Invoke(methodInvokerDelegate); 
    else 
     methodInvokerDelegate(); 
} 
+0

ありがとう、これは素晴らしいです、私が探していたものです!私はControl.Invokeを使用しようとしていますが、実際に何をしているのか分かりませんでした。 1つの質問 - エラーが発生しました: "'代理人':識別子が見つかりません" ありがとう! –

+0

@ルークどのようなバージョンの.Netをお使いですか? – iraSenthil

関連する問題