2016-07-04 9 views
3

C#では、Control.Invokeを使用して、フォームが実行されている同じスレッドからコントロールのプロパティを変更する際に問題はありますか?Control.Invokeフォームが実行されている同じスレッドから

私はそれがControl.Property = valueを使用して最善であることを知っていますが、代わりにControl.Invokeを使用することの結果がどのようなものかを知りたいと思います。

例:

この使い方:

public partial class FormMain : Form 
{ 
    private void Button1_Click(object sender, EventArgs e) 
    { 
     Label1.Text = "Hello"; 
    } 
} 
+2

はプロペあります。これに代えて

public partial class FormMain : Form { private void Button1_Click(object sender, EventArgs e) { this.Invoke(new delegate {Label1.Text = "Hello"}); } } 

rty InvokeRequired。 Invokeを必要とするかどうかを知るために、これを最初に呼び出す必要があります。 –

+2

呼び出しを行うだけのオーバーヘッド。それは正常に動作するはずですが、なぜですか? – dbasnett

+6

[参照元](http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Control.cs,7241)によると: "これを呼び出すのはエラーですコントロールが属する同じスレッド。 (これは 'Invoke(delegate、object [])'にありますが、 'Invoke(delegate)'がそのメソッドに委譲するだけです) –

答えて

-1
this.Invoke(new Action(
    delegate() 
    { 
     label2.Text = "Test"; 
    })); 

または

this.Invoke(new MethodInvoker(
    delegate() 
    { 
     label2.Text = "Test"; 
    })); 
+0

あなたはその質問を読んだことがありますか? – Blorgbeard

+0

@Blorgbeardあなたはあなたのコマンドについて話しません。私はあなたの質問を助けることを望む!あなたが私の答えについて助けてくれないなら、あなたの質問をより詳細にアップロードしてください。 –

関連する問題