Windowsフォームが機能しているときにデリゲートクラスを使用して呼び出しを行う場合は、常にInvokeRequiredを使用する必要があります。大丈夫です。しかし、動作中にInvokeReuqiredプロパティを変更したのは誰ですか。この画像を確認してください:
3 に答える
InvokeRequired
コントロールがtrue
作成されたスレッド以外のスレッドからアクセスされた場合、またはfalse
それ以外の場合です。
あなたの質問にもっと直接的に答えるために、それはInvokeRequired
プロパティが特定の時点で「変化する」ということではありません。アクセス元のスレッドに基づいて異なる値を返す可能性があると言った方が正確です。
Delegate.BeginInvoke
を呼び出しています。button1_Click
これはSayListeyeEkle
、スレッドプールスレッドで呼び出されることを意味します。つまり、 InvokeRequired
trueであることが完全に正しいことを意味します。UIスレッドで、から直接呼び出した場合は当てはまりません。ListeyeEkle
button1_Click
「InvokeRequiredプロパティを変更する」とはどういう意味ですか?真/偽の値が変化しているということですか?trueが返され、BeginInvokeへのデリゲート呼び出しを行った後、デリゲートでは、値がより適切に変更されています。重要なのは、コントロールが作成されたスレッドに「切り替える」ことです。コントロールが作成されたスレッド以外のスレッドでInvokeRequiredを含むコード行が実行されると、InvokeRequiredはtrueを返します。コントロールが作成されたのと同じスレッドで実行された場合にのみ、falseが返されます。プロパティには名前が付けられている可能性があります
NotOnThreadIWasCreatedIn
。これが実際に行われていることのすべてです。InvokeRequired
それはそれが何のために使われる必要があるかを伝えるために名付けられました...