「どんなにくだらない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したら終わりだろ。変数の書き換え中に切り替わらんなら何も問題ないはずだよな。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 《いつかこの子がドレスを着るまで生きたい》サウナ閉じ込め…専門家が指摘する月額39万円サウナの“論外な構造” [パンナ・コッタ★]
- 官邸の安保担当「日本は核保有すべきだ」 政府内の検討は否定 [蚤の市★]
- 女子高生が初の司法試験合格 予備ルートの慶応女子高3年「企業法務の弁護士になりたい」 [ぐれ★]
- 【芸能】紅しょうが・稲田 男性と食事で割り勘 「ダサい」と幻滅も… 婚活アドバイザーが一刀両断「割り勘になった時点で負け」 [冬月記者★]
- 松本人志「DOWNTOWN+」に非吉本から売り込み殺到 加入者50万人突破で [Ailuropoda melanoleuca★]
- フィンランド議員らがSNSに“つり目”写真 「アジア人差別に政府としてどう対応?」問われた官房長官の答えは ★2 [ぐれ★]
- 年末年始休みなし😭
- オープンハウスの新入社員さん、初めての給料日に70万円支給へwwwwwwwwww [784715804]
- 🏡☢核兵器使用推進スレ☢🏡
- 【吉報】玉木×高市の「年 収 の 壁」撤廃の減税額、マジのガチですごすぎるwmwmwmwmwmwmw [517459952]
- アナキン・スカイウォーカー←これ初めて聞いた時の正直な感想
- 【速報】高市首相「最低賃金引き上げします。来年検討します!!」キタ━━━━(゚∀゚)━━━━‼ [921362874]
