「どんなにくだらない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は例のアホだろ。相手すると有害
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日中関係改善は「下手をすると10年かかる」 トランプを全面信頼できない高市官邸の苦悩 [ぐれ★]
- 町山智浩「日本のパンダ経済効果は308億円」…「…いらない」と言ってる人達は、パンダで暮らす人々の損害補填してくれるのか…と問う★3 [少考さん★]
- 特攻機と同じ名称「桜花中」、福岡・大牟田市の新設中学校名に異論 市民団体が再考申し入れ ★2 [少考さん★]
- 【速報】長期金利上昇、一時1.980%に [蚤の市★]
- 「育休もらい逃げ」はずるい?🤔職場復帰しないで辞めるはアリかナシか [パンナ・コッタ★]
- こども家庭庁、2026年から“独身税”を開始、年収200万なら年4200円、年収400万なら年7800円 ★8 [お断り★]
- 【高市緊急】 高市総理。 夕方5時20分から記者会見 🎤 [485983549]
- 上野のパンダ、4時間待ちwwwwwwwwwwwwwwwwwwwwwwwww(観覧時間1人1分) [271912485]
- 経済学者「経済的には大したことない」高市答弁による中国の制裁にピシャリ [834922174]
- ヒロミ「パンダがいなくなる状況でも高市支持は高い。皆、我慢すべきという雰囲気がある」 [834922174]
- ホリエモン(堀江孝文)のスーツ姿、限界突破。 [153490809]
- さあ、吸い込んで
