[過去ログ] ふらっと C#,C♯,C#(初心者用) Part138 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
779(5): (ワッチョイ 9f5d-haGl) 2018/07/21(土)20:35 ID:BEEMYUE30(2/9) AAS
私は >>773 ですが Invoke について自分があまり良く分かってない気がしてきたので
詳しい方がいらっしゃったら教えてください
UIスレッドで Parallel.ForEach を呼ぶとUIスレッドをつかんだまま並列処理が実行されて、
その並列処理のスレッドで Invoke を使うとデッドロックしてしまう気がするのですが
実際はそういうことはないのでしょうか?
781(2): (ワッチョイ 9f5d-haGl) 2018/07/21(土)21:15 ID:BEEMYUE30(3/9) AAS
>>779 です
WPF で下のようなコードを実行してみたらやっぱりデッドロックしてしまいました
Invoke はそれなりに慎重に使わないといけないみたいです
void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("このメッセージは必ず表示される");
Parallel.ForEach(Enumerable.Repeat(0, 2), i => Dispatcher.Invoke(() => { }));
省8
783(1): (ワッチョイ bf99-DFDX) 2018/07/21(土)21:18 ID:nH897ECr0(2/3) AAS
>>779
並列処理はUIスレッドではないスレッドで行われるよ。
いや、UIスレッドで行われるとは限らない、と言う言い方の方が正しいかな。
UIスレッドを掴んだままの意味がわからんが、挙動が謎なら、ブレークポイントつけて実行して、どのスレッドが何をしてるかを把握してはいかがだろうか。
今どのスレッドを使ってるかは表示されてるから。
789(1): (ワッチョイ 9f5d-haGl) 2018/07/21(土)22:44 ID:BEEMYUE30(6/9) AAS
>>788
あくまで私一人の考えですが・・・
[1] Invoke を使うと >>779 に書いたような理由でデッドロックするので
Parallel.ForEach でUIスレッドを使いたいなら >>773 のようにすべき
[2] しかし、同じく >>779 に書いたように Parallel.ForEach はUIスレッドを
つかんだまま並列処理を行うのでデータグリッドの更新処理だけ
Parallel.ForEach から切り出してもほとんど同じなのでは?
省8
791(1): (ワッチョイ 9f7f-0FgR) 2018/07/21(土)23:00 ID:gktKld7A0(3/3) AAS
既に>>779に書いてあったね。その通り。
792(1): (ワッチョイ 9f5d-haGl) 2018/07/21(土)23:10 ID:BEEMYUE30(7/9) AAS
>>790-791
レスありがとうございます
>>779 の考えで正しいのか不安だったのですがお陰様で自身が持てました
他に何かおかしなことを言ってしまっていたら教えていただけると嬉しいです
>>788
>>789 はレスとしてとっ散らかっている気がしてきたので一問一答で答えてみます
> つまりフォームアプリでParallel処理内でinvokeってそもそも悪手なんでしょうか
省6
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.033s