「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part135
http://mevius.5ch.net/test/read.cgi/tech/1517749348/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
ふらっと C#,C♯,C#(初心者用) Part136
■ このスレッドは過去ログ倉庫に格納されています
2018/03/03(土) 15:09:05.75ID:SBEkwl3H
2018/03/03(土) 18:09:05.02ID:T0Do3u+2
>>1乙
放置してると落ちるんでね?
放置してると落ちるんでね?
2018/03/03(土) 19:55:41.98ID:kXsLgfSK
いちおつ!
4デフォルトの名無しさん
2018/03/04(日) 08:49:14.26ID:Jnf3+hM1 invokeの意味がよく分からない。
別のスレッドからUIのコントロールを触るには、手順が必要でそれをInvokeを通すとちゃんとやってくれる
ということらしい。
疑問1:手順を踏まないと駄目なのはFormに貼り付けたコントロールだけなのか?
これは「コントロールはスレッドセーフじゃない」と同義のことか?
疑問2:一般的なクラスやListデータはスレッドセーフなのか?
例えば、100kバイトの受信データが常時更新されているとする。これをメインスレッドにコピーするときに
半分程度コピーしたときに、次の受信割り込みでスレッドが切り替わって上書きされるなんてことは起きないのか?
スレッドの切り替えはOSが勝手にやるんだから、これは当然起きてしまいそうな気がするんだが、防ぐ手立ては
あるんか?
別のスレッドからUIのコントロールを触るには、手順が必要でそれをInvokeを通すとちゃんとやってくれる
ということらしい。
疑問1:手順を踏まないと駄目なのはFormに貼り付けたコントロールだけなのか?
これは「コントロールはスレッドセーフじゃない」と同義のことか?
疑問2:一般的なクラスやListデータはスレッドセーフなのか?
例えば、100kバイトの受信データが常時更新されているとする。これをメインスレッドにコピーするときに
半分程度コピーしたときに、次の受信割り込みでスレッドが切り替わって上書きされるなんてことは起きないのか?
スレッドの切り替えはOSが勝手にやるんだから、これは当然起きてしまいそうな気がするんだが、防ぐ手立ては
あるんか?
2018/03/04(日) 09:32:08.73ID:fUFxJxoP
>>4
>手順を踏まないと〜
いいや、作成したコントロールすべて
>これは「コントロールは〜
スレッドセーフ性についてはリファレンスに書いてあるのでお読みください
勝手に判断していいことは何もない
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.control(v=vs.110).aspx
>手順を踏まないと〜
いいや、作成したコントロールすべて
>これは「コントロールは〜
スレッドセーフ性についてはリファレンスに書いてあるのでお読みください
勝手に判断していいことは何もない
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.control(v=vs.110).aspx
2018/03/04(日) 09:37:54.15ID:fUFxJxoP
>疑問2
個々のクラスのスレッドセーフ性については、使用するクラスのリファレンスを参照
スレッドセーフなコレクションクラス群というのも提供されている
https://docs.microsoft.com/ja-jp/dotnet/standard/collections/thread-safe/
スレッドセーフでないクラスをスレッドセーフに扱いたいのであれば自分でその機能を実装する必要がある
その際はlockステートメントやAutoResetEventクラスなどが役に立つだろう
個々のクラスのスレッドセーフ性については、使用するクラスのリファレンスを参照
スレッドセーフなコレクションクラス群というのも提供されている
https://docs.microsoft.com/ja-jp/dotnet/standard/collections/thread-safe/
スレッドセーフでないクラスをスレッドセーフに扱いたいのであれば自分でその機能を実装する必要がある
その際はlockステートメントやAutoResetEventクラスなどが役に立つだろう
2018/03/04(日) 09:43:21.26ID:fUFxJxoP
どうやって実装するかに関しては
一般的なスレッドセーフプログラミングのガイドに従うが
あまりにも広範すぎるのでここには記載しない
手っ取り早くはラッパクラスを書き、
ラッパクラスのプライベートなインスタンス変数にロックオブジェクトを確保し
すべてのメソッドの入り口でロックを取ってしまうことである
一般的なスレッドセーフプログラミングのガイドに従うが
あまりにも広範すぎるのでここには記載しない
手っ取り早くはラッパクラスを書き、
ラッパクラスのプライベートなインスタンス変数にロックオブジェクトを確保し
すべてのメソッドの入り口でロックを取ってしまうことである
8デフォルトの名無しさん
2018/03/04(日) 10:16:01.96ID:Jnf3+hM1 >>5
こいつらだけがスレッドセーフでそれ以外はセーフじゃない。
M:System.Windows.Forms.Control.BeginInvoke(System.Delegate),
M:System.Windows.Forms.Control.EndInvoke(System.IAsyncResult),
M:System.Windows.Forms.Control.Invoke(System.Delegate),
P:System.Windows.Forms.Control.InvokeRequired,
and M:System.Windows.Forms.Control.CreateGraphics(ただしすでにハンドルが生成されていること)
ハンドルがクリエイトされる前のバックグラウンドでの.Forms.Control.CreateGraphicsスレッド
の呼び出しは問題をひきおこす。
って書いてあるので、まあそういうことなんだな。
セーフじゃないのは解ったが、スレッドが何処で切り替わるかが問題だな。
少なくともInvoke中は切り替わらないから、Invokeに渡すDelegateにガッサリとほりこんでやれば絶対に
安全ってことでいいのだな。
それなら別にLockもへったくれもいらない。なんも難しくないな。
こいつらだけがスレッドセーフでそれ以外はセーフじゃない。
M:System.Windows.Forms.Control.BeginInvoke(System.Delegate),
M:System.Windows.Forms.Control.EndInvoke(System.IAsyncResult),
M:System.Windows.Forms.Control.Invoke(System.Delegate),
P:System.Windows.Forms.Control.InvokeRequired,
and M:System.Windows.Forms.Control.CreateGraphics(ただしすでにハンドルが生成されていること)
ハンドルがクリエイトされる前のバックグラウンドでの.Forms.Control.CreateGraphicsスレッド
の呼び出しは問題をひきおこす。
って書いてあるので、まあそういうことなんだな。
セーフじゃないのは解ったが、スレッドが何処で切り替わるかが問題だな。
少なくともInvoke中は切り替わらないから、Invokeに渡すDelegateにガッサリとほりこんでやれば絶対に
安全ってことでいいのだな。
それなら別にLockもへったくれもいらない。なんも難しくないな。
9デフォルトの名無しさん
2018/03/04(日) 10:18:39.61ID:Jnf3+hM1 >一般的なスレッドセーフプログラミングのガイドに従うが あまりにも広範すぎるのでここには記載しない
いったいどう広範なんだ? Lockしたら終わりだろ。変数の書き換え中に切り替わらんなら何も問題ないはずだよな。
いったいどう広範なんだ? Lockしたら終わりだろ。変数の書き換え中に切り替わらんなら何も問題ないはずだよな。
2018/03/04(日) 10:21:36.77ID:kbKww4G0
頭悪そうだから死んだ方が早いよw
頑張って
頑張って
2018/03/04(日) 10:26:47.18ID:P1djYTMd
ID:Jnf3+hM1は例のアホだろ。相手すると有害
12デフォルトの名無しさん
2018/03/04(日) 10:27:55.49ID:Jnf3+hM1 Lock(object)
馬鹿っぽいのはこっちだな。なんでObjectでロックする必要があるんだよ。単にラベルでいいだろ。
Lock(name)
なんかサンプルにしろ説明にしろ難しそうに見せたがるんだよな。賢そうに見せたいんだろうな。要するに
賢くないってことだな。
馬鹿っぽいのはこっちだな。なんでObjectでロックする必要があるんだよ。単にラベルでいいだろ。
Lock(name)
なんかサンプルにしろ説明にしろ難しそうに見せたがるんだよな。賢そうに見せたいんだろうな。要するに
賢くないってことだな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】J1昇格PO決勝戦 千葉、来季のJ1昇格が決定 17年越しの悲願叶える…オリジナル10が05年以来のJ1にそろう [久太郎★]
- 南京で「大虐殺」追悼式典 中国、高市政権をけん制 (共同通信) [少考さん★]
- 【こども食堂】 過去最多更新、1万2601カ所 物価高「踏ん張る」 [煮卵★]
- 中国・ロシア両軍の爆撃機が東京方面へ向かう「異例のルート」を共同飛行…核も搭載可能、連携して威嚇か ★5 [ぐれ★]
- 「今の女性はルッキズム」は本当なのか? 若い世代が結婚相手に求める"本当の条件" [少考さん★]
- 【日銀】0.75%に利上げへ 来週の決定会合で、30年ぶり水準 賃金改善の継続見込む [ぐれ★]
- ネトウヨ「日本にダメージを与えるやつは反日」あれこれって [358382861]
- 【実況】博衣こよりのえちえちドラクエ1&2リメイク🧪★4
- 【悲報】高市首相、地元選挙区の大宗教である天理教系企業に1年で5000万円の発注 [115996789]
- 【実況】博衣こよりのえちえちドラクエ1&2リメイク🧪★3🏡
- 鈴木農水大臣「原因はわからないけどおこめ券ボイコットが広がってます助けてください😭」 [931948549]
- 正義のミカタ「中国は日本人の反高市勢力を裏で操ってる。あいつらはスパイ」 [931948549]
