[解決済み】Invoke()とBeginInvoke()の違いは何ですか?)
質問
とはどう違うのでしょうか?
BeginInvoke()
と
Invoke()
は?
主にそれぞれが何に使われるのか。
EDIT: スレッド化オブジェクトを作成してその上でinvokeを呼び出すのと、単に
BeginInvoke()
それとも同じものなのでしょうか?
どのように解決するのですか?
ということですか?
Delegate.Invoke
/
BeginInvoke
または
Control.Invoke
/
BeginInvoke
?
-
Delegate.Invoke
: 同じスレッドで同期的に実行されます。 -
Delegate.BeginInvoke
: 非同期で実行されthreadpool
スレッドになります。 -
Control.Invoke
: UIスレッドで実行されますが、呼び出し側のスレッドは完了を待って続行します。 -
Control.BeginInvoke
: UIスレッドで実行され、呼び出し側のスレッドは完了を待たない。
Timの回答では、どのような場合に
BeginInvoke
- を対象としたものでしたが
Delegate.BeginInvoke
と思っています。
Windows Formsアプリの場合は、以下のようにするといいと思います。
通常
使用
BeginInvoke
. この方法では、例えばデッドロックの心配をする必要はありません。しかし、次に見るときにはUIが更新されていない可能性があることを理解する必要があります。特に、UIスレッドが表示のために使おうとしているデータを修正してはいけません。例えば、もしあなたが
Person
と
FirstName
と
LastName
プロパティを使用しました。
person.FirstName = "Kevin"; // person is a shared reference
person.LastName = "Spacey";
control.BeginInvoke(UpdateName);
person.FirstName = "Keyser";
person.LastName = "Soze";
そうすると、UIにはquot;Keyser Spacey"と表示されてしまうかもしれません(quot;Kevin Soze"と表示される可能性もありますが、メモリモデルの奇妙さによってのみ可能です)。
ただし、このような問題がなければ。
Control.BeginInvoke
の方が簡単で、バックグラウンドスレッドが無意味に待たされるのを防ぐことができます。なお、Windows Forms チームはあなたが
Control.BeginInvoke
を呼び出す必要はありません。
EndInvoke
. これは一般的な非同期呼び出しには当てはまりません。通常、すべてのBeginXXXには対応するEndXXXの呼び出しが必要で、通常はコールバックの中にあるはずです。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】IntPtrとは一体何なのか?
-
[解決済み] 関数を終了するには?
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】クロススレッド操作が有効でない。コントロール 'textBox1' が作成されたスレッド以外のスレッドからアクセスされた [duplicate] 。