1 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:53:21.18 ID:dhjmiKBp0.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>980 を踏んだ人は新スレを建てて下さい。>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part152 mevius.5ch.net/test/read.cgi/tech/1629888256/ ■関連スレ C#, C♯, C#相談室 Part94 mevius.5ch.net/test/read.cgi/tech/1553075856/ ■コードを貼る場合は↓を使いましょう。 https://ideone.com/ https://dotnetfiddle.net/ ■情報源 https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries/ https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/ https://docs.microsoft.com/en-us/dotnet/standard/class-libraries/ https://referencesource.microsoft.com/ https://source.dot.net/ ・Insider.NET > .NET TIPS - @IT https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html ・DOBON.NET .NET Tips https://dobon.net/vb/dotnet/index.html VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
790 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:35:53.77 ID:nTnTl9DUr.net] わかりました、Mauiで頑張る
791 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:44:13.78 ID:Ii2fD9R0a.net] WPFの方が高DPI(高「解像度」では必ずしもないよね)対応が優れているっていうのは DPIが異なる複数のディスプレイ間をウィンドウが行ったり来たりするような状況を想定した話?
792 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:49:58.72 ID:ARjVXSY1M.net] WPFってWebみたいに解像度に合わせて画像切り替えるとか標準じゃできないだろ? HDPI対応が優れているとか片腹痛い
793 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 15:19:51.12 ID:EyuzyEvM0.net] 俺社環だと2012R2なんで4.5.1なんだよな サポート外だからさっさと4.6移行に切り替えたいけど、不具合出てないから誰もやりたくないという
794 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 16:54:28.58 ID:1FaTcT0G0.net] >>779 そんなもん解像度は取得できるしなんとでもやりようあるやろ つうデスクトップGUIアプリに求めることかそれ? どんなシチュエーションで必要なのかわからん
795 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 18:01:32.84 ID:dpfIrrzB0.net] 想像力が無いだけだなあ
796 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 18:55:07.04 ID:Hnp3kh2k0.net] >>780 誰もやりたがらないけど、OS のサポート切れが迫ってきて対応中。w いまさらその上で動いてるオレ様ソフトのインストールの手順とか覚えてないんだけどなあ。
797 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:41:02.79 ID:DSkywrpw0.net] ドキュメントは残しておけよw
798 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:49:34.26 ID:vcUHcBQYM.net] 昔自分用に作った(家で自分の時間を使って)アプリがあって退職時に無理やり引き継ぎさせられて勝手に使われてる PC壊れたときに連絡あってアプリを送った思い出…
799 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:51:39.05 ID:vcUHcBQYM.net] 毎日使うものなので劇的に工数が減った あくまでも自分用 それを恨みこそすれ感謝してない元会社がタダでずっと使ってる
800 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:17:29.45 ID:9EvEVFCn0.net] Main内 Test t = new Test(); t.Num = 1; t.Add(10); Console.Write(t.Num); class Test { public int Num {get; set;} public int Add(int p) { return Num + p; } } これで出力が1になるのは何故なのでしょう?11になると思うのですが…
801 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:22:02.32 ID:vcUHcBQYM.net] return Num + p; これは足したものを返してるだけで Num自体に変更をかけていないからな Num = Num + p; return Num; ならわかる
802 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:37:34.36 ID:9EvEVFCn0.net] あ、、、確かに。納得しました。 ありがとうございました
803 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 23:20:32.09 ID:mmM8IstB0.net] いえいえ
804 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 14:44:30.58 ID:is+XSiL/0.net] すみません、初心者で何からしたら良いのか、何をすべきなのか分からなくて助けてください。 計算アプリを作らなければならず、調べてなんとかボタン配置とかはできたのですが、プログラミングが何をどういった順番でするのか分からなくて… 計算は 固定数字÷ボタン入力した数字(+必要に応じて選択した数字)×ドロップダウンで選択した数字 これを出来るようにしたいのですが、やるべきことは @ボタンとドロップダウンの紐付け?認識? A入力した数字の表示 B()の条件付け C計算結果の表示 これで大丈夫でしょうか? うまく質問できず、申し訳ありません。 今までプログラミングに触れたことが無く、必要情報が不足していましたら追加致します。
805 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:13:55.20 ID:XkFSmW1wd.net] 今期の単位は諦めましょう
806 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:15:05.76 ID:Wu5qqWWYa.net] ボタン押したらボタンに対応した値を表示する(固定値で割らなくておk) それができたら、次は固定値で割った結果を表示するように修正 それができたら、次はドロップダウンの選択が変わったことを知る方法と選択された値を取得する方法調べる それがわかったら、ドロップダウンの値を掛けた結果を表示できるように修正 それができたら、どんな条件でこういう計算するって条件別け かな?
807 名前:デフォルトの名無しさん [2022/01/23(日) 15:16:44.75 ID:CCpFlBt8M.net] それを決めたら他の人がコードを書いてくれるのか? それならマルナゲをオススメ
808 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:20:46.99 ID:is+XSiL/0.net] >>793 ありがとうございます! 直ぐにやってみます。 やるべきことを分かりやすく教えて頂き、本当にありがとうございます。
809 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:30:22.12 ID:is+XSiL/0.net] >>794 いえ、コードも私が書かなければなりません。 丸投げする相手が居ないです…
810 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 19:04:59.40 ID:nwzKJ0xW0.net] ひっでえ課題 そんなもんが何の足しになるんや
811 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 19:47:07.31 ID:is+XSiL/0.net] やっと、数字の表示ができました…… 何故か一桁しか表示されなくて、次の数字押したら上書きされるけど、表示はできました… 何のたしになるかは分からないです… 曰く『コロナ禍だけど、この機会に家で出来きることをしよう!』って事らしいです。
812 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 19:48:24.39 ID:is+XSiL/0.net] 投稿が重複してしまいました、誠に申し訳ありません。
813 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 23:26:33.12 ID:pR5ferbX0.net] メンバー'hoge' はインスタンスデータにアクセスしないため、static にマークできます
814 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 12:21:02.64 ID:bXxRLmwJ0.net] 四角をグラフィックに描画する場合の座標について g.DrawRectangle(pen, 始点x座標,始点y座標,幅,高さ); このようにあります ならば幅が2,2の場合 g.DrawRectangle(pen, 16, 16, 2, 2); これで(16,16)-(17,17)で2ドットだけの中抜きがないものを想像するのですが 実際は (16,16)-(18,18)の中央に穴がある状態の四角が描画されるようです これは3,3指定なら理解できるんですが 幅指定なのになぜこのようになってしまうのでしょうか?
815 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 12:39:27.95 ID:zeqExr0Ka.net] g.DrawRectangle(pen, 16, 16, 1, 1); g.DrawRectangle(pen, 16, 16, 0, 0); こいつらはどういう挙動をするべきかを考えたら?
816 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 13:27:00.02 ID:VRumLvNTM.net] GDIは終点は描画領域に「含まない」 だから、幅として成立する。 FORTRAN由来とかで「含む」系 もあるので注意だ
817 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 14:09:38.84 ID:97kNTb42a.net] >>801 まあこうは言える。 まずユークリッド幾何学的な数学的に抽象化された世界で考えるべき。 その世界では、1対の平行線の距離がペンの幅より大きければ必ず平行線の間に「隙間」が出来る。 GDI+の描画はこういう抽象化された世界をピクセルの世界に写像してるだけ
818 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 18:54:49.46 ID:97kNTb42a.net] まあたぶんこんな感じだね (1) 論理座標の原点は(0, 0)のピクセルの中心に設定されている。つまり論理座標とピクセル座標は 0.5ずれている(少なくともペンの幅が奇数ピクセルの時は) (2) DrawRectangleは論理的な矩形の辺がペンの中心になるように描画する (3) だから描画された矩形はペンの幅の1/2 * 2だけ指定したサイズより大きくなる
819 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 19:46:14.25 ID:ph7NlGryd.net] 小数のない世界なら厚みゼロで隙間がないんだろうけど、塗りつぶすならFillRectngleで明示しろってことかな。
820 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:02:24.84 ID:AwkrZJuk0.net] 独習C#やってるんだけど、これを一通りやれば基本は身に付くと思っていい?
821 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:03:27.85 ID:3T3OgJ8A0.net] 信じるしかないだろ。もう買ってしまったのだから。
822 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:23:59.29 ID:bPaq+vdr0.net] >>807 その本なら自信持って良いよ。 record, using var, initなどのC#8以降の機能は別途学習が必要。 LINQや正規表現などは実践でないとなかなか身につかないので、だいたい理解したらどんどん読み進めるのがおすすめ。 ちなみにプログラミング未経験で、全部読むのに3ヶ月かかりました。
823 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 00:57:13.82 ID:TS8Lm52TM.net] 自分だったら3か月かかるならモチベーションが保てそうにないなw 20年前はそんな本がなく手探りだったけど逆に良かったのかな…
824 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 01:14:23.92 ID:TS8Lm52TM.net] 仕様もライブラリも今よりペラペラだったから入門しやすかった
825 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 01:55:09.45 ID:4qIztPSU0.net] >>809 ありがとう プログラミング経験はエクセルVBAのみ C#は簡単な方だと聞いてたけど難しいね、頑張ります
826 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 12:37:45.33 ID:IaxANYMEd.net] やっつけ仕事するだけなら今も昔も変わらんと思う C#の便利機能が山ほど増えてて書きやすくはなってるけどどこまでが入門なのかは正直わからん
827 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:20:24.56 ID:S6jLK41vM.net] Recordとかぜってえ使わねえ
828 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:32:46.48 ID:MBxJE5i40.net] ともーじゃん? ・・・まあ使わなくても済むよなあ
829 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:50:18.74 ID:wOQPCoOZM.net] DTOだらけの低品質なコードが量産されてTypeScriptみたいになりそうな気はしてる
830 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 14:28:40.80 ID:pfxZ0tMsd.net] おれも独習で勉強した 分厚いから真ん中ぐらいまでくると最初の方忘れてるわ んでもう一度戻ってやり直したり、途中で挫折したりで 1年以上うだうだ読んでた 読み終わる前にいろいろ作って遊んでたけど イベントとか非同期処理とか分からないとまともなの作れないんで 途中すっ飛ばしてその辺読んだり
831 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 19:22:56.75 ID:uxP3YVvMH.net] >>817 その独習、旧版(ハーバード・シルト)?
832 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 19:59:28.45 ID:zF2HduXmM.net] シルトは過去の人 昔読んだ時もそういうイメージ 文法ぐらいが得意分野
833 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 21:16:01.91 ID:uxP3YVvMH.net] >>819 では最近の教科書で優れたものは、どなたの著作ですか?
834 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 00:27:57.09 ID:XnQeNwtl0.net] 俺はオライリーの薄いやつで大体把握して、デザパタをjavaの結城さんのやつで学んだな
835 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 10:26:45.87 ID:i4V+v3ft0.net] C++の本で勉強した知識だけでC#の本は買わず、dobonを見ながら書いてる
836 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:37:45.37 ID:UrWQ/KNN0.net] dobonよく参考にしてるけどもしかして見てるとバカにされる風潮とかあるの?
837 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:43:53.93 ID:OmkEpZCo0.net] 昔はよくお世話になったけど、今となっては古い記事が多いので最近はあまり見ないな
838 名前:デフォルトの名無しさん [2022/01/28(金) 05:13:54.08 ID:AmULl7RP0.net] 全ページのヘッダに古い言語仕様の内容であることの明示くらいはしてほしい あと初心者向けと言いながら 同じ処理でベストプラクティスと非推奨な書き方を同列に載せてるのも印象よくない
839 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 08:13:42.95 ID:MUNMfoCeM.net] recordはvalueobject作るのに便利 使い捨てのアプリ作るのには不要
840 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 12:18:41.61 ID:g6bFcMDaM.net] で、あるか
841 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:24:04.65 ID:C+lFkEfx0.net] お世話になります。 ComboBox.IsReadOnly を使おうとしてエラー(usingまたはアセンブリが不足)が出ました。 https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.combobox?view=windowsdesktop-6.0 で調べ、 名前空間:System.Windows.Controls アセンブリ:PresentationFramework.dll を追加しました。 しかし、現時点でエラーに変化がなく困っています。他に考えられる原因があればお教えてください。
842 名前:デフォルトの名無しさん [2022/01/28(金) 14:32:54.24 ID:QwC8uFzi0.net] 「他」とか言われてもお前以外にゃわからんのよ
843 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:38:21.72 ID:S6VsJW6p0.net] >>828 追加したのはWPF用のアセンブリだけどお前が作ってんのはWPFじゃなくてWinFormsだとか
844 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:20:17.24 ID:D0DTDHxMd.net] ComboBoxのインスタンス作らずにプロパティ見ようとしてるとか? プロジェクトのエラー起こしてるコードさえないからわからん
845 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:31:53.40 ID:C+lFkEfx0.net] >>829 >>830 反応ありがとうございます。 はい。WinForms(VisualStudio使用)です。 ソリューションエクスプローラーの参照からアセンブリを探して追加しました。 WPF用ではなかったか確認します。 using System.Windows.Controls と書いて追加した気になっていましたが、 ソリューションエクスプローラーに同名がないのを確認しました。これが原因かもしれないので調べてみます。 >>831 盲点でした。確かにインスタンス化していません。やってみます。 みなさんのアドバイスのおかげで糸口が見えました。あとは自力で頑張ってみます。 また困ったことがあればよろしくお願いします。
846 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:36:53.16 ID:bcAzYVuU0.net] >>832 横からレスだけど、次からは情報を端折らずに書いてね 場合によるから
847 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:38:40.89 ID:bcAzYVuU0.net] >>832 833の追記 WinFormsのComboBoxはSystem.Windows.Formsの方だったはず
848 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:51:48.62 ID:C+lFkEfx0.net] >>832 反応ありがとうございます(横レスでも大歓迎です) 情報を端折ってしまったようで今後気を付けます。 必要になる正しい情報とはこちらでよろしいですか? エラー CS1061 'ComboBox' に 'IsReadOnly' の定義が含まれておらず、型 'ComboBox' の最初の引数を受け付けるアクセス可能な拡張メソッド 'IsReadOnly' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください それとも部分的であってもソースでしょうか?今回の問題では必要ないと判断してしまいましたが、次回以降気を付けます。 次回もぜひお願いします。ありがとうございました。
849 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:04:30.29 ID:AFiLYmq20.net] 単に、WinFormsのComboBoxにはIsReadOnlyプロパティが存在しないだけだな https://atmarkit.itmedia.co.jp/ait/articles/0711/01/news152.html
850 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:32:10.58 ID:bcAzYVuU0.net] >>835 エラーメッセージもそうだけど、こっちが言ってたのは「WinFormsかWPFか」の方だね WinFormsの方のComboBoxにはDropDownStyleプロパティがあるからこれにComboBoxStyle.DropDownListを渡せば選択可能で文字列入力を受け付けないタイプになるよ (まあ、他の人がすでに提示しているようだけど)
851 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:34:15.50 ID:ycXEhqEs0.net] もしかして Enabled
852 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:05:47.31 ID:C+lFkEfx0.net] みなさん親切で涙が出てきます。 >>836 ・837・838 反応ありがとうございます。 ・C#にはWinFormsの他にWPFがあったのですね。WPFという言語なのかと思っていました。 今後はエラーメッセージと共にWinFormsであることを最初に宣言します(初心者すぎてすみません) IsReadOnlyプロパティが存在しない ・はい。通常のプロパティでは見つけられませんでした。 こちらのサイトを参考にさせてもらい挑戦していました。 https://blog.t5o.me/post/20140316/c-sharp-xaml-combobox-read-only.html ・ComboBoxStyle.DropDownListとEnabledも試しに設定しました。 やりたいことは、 コンボボックス横にチェックボックスを設置 チェックボックスが真の時、コンボボックスを規定値にし操作不可能にすることですが、 上記設定でもドロップダウンボタンが反応するので別の方法を探し、上記サイトにたどり着きました。 ・第2案として、チェックボックスが真の時、コンボリストを規定値以外を削除し対応しようかと考えています。 (ドロップダウンリストが空白で1行出てきてしまうのがかっこ悪いかなと考えて最善を探していました) なんとか頑張ってみます。みなさんありがとうございました。
853 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:14:46.64 ID:AFiLYmq20.net] >>839 System.Windows.Forms.ComboBoxを継承してカスタムコントロールを作るってのが調べると出てくると思うよ 例えばこんなのとか jeanne.wankuma.com/library/readonlycombobox/
854 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:20:12.41 ID:OmkEpZCo0.net] >>839 839のリンク先もそうだけど、記事にXAMLって単語があったらWinFormsと無関係だと思って良いよ WinFormsのコンボボックスの操作不能にするのは、comboBox.Enabled = false;
855 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:13:46.87 ID:l6dMzLky0.net] c# + visual studioでデータブレークポイント使えますか? c#のクラスは参照型ですが、値のコピー (int型変数i,jだと、i = jに相当する処理) するにはどのようにすればよいのでしょうか?
856 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:27:11.67 ID:LzvJDC40a.net] ブレークポイントの上で右クリ→条件
857 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 20:10:31.96 ID:LzvJDC40a.net] コピーはコピー先をnewして作って、メンバー変数の値をそこに一個ずつコピーしてく クラスによってはそういうnewとコピーをしてくれるClone()を持ってることもある
858 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:47:47.80 ID:3whatsSd0.net] 独習C#で学習されている方が多そうですがマルチスレッド難しすぎないですか(泣) 新版を使っておりますが、P530〜の説明が意味不明です awaitとWait()メソッドの違いがよくわかりません どちらもタスク(サブスレッド)の処理を待機するという同じような意味という理解ですが、 なぜかサンプルプログラムで両方使われています 試しに片方削除して実行すると、ループが最後まで実行されないので、意味が違うんでしょうが調べてもよくわかりません… どなたかご教示いただけないでしょうか
859 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:25:22.69 ID:xNgrtKWR0.net] >>845 大別するならawaitは非同期、Task.Wait()は同期的、という所だけど Task.Wait()は単純にその場でタスクの終了を待つので足踏みする事になる awaitを使うと内部的にはその後のコードもTask化されてas
860 名前:yncメソッドの返り値になる awaitまで到達した時点で呼び出し元に処理が戻るので、主にUIスレッド等でよく使われる 後続処理を追加するだけならTask.ContinueWith()も有るんだけど UIコンポーネントは作成スレッドからしかアクセスしてはならない制約とか 後続処理を担うスケジューラ指定とか煩雑なのを纏めて糖衣構文にしたのがawait [] [ここ壊れてます]
861 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:18:28.62 ID:5CdUE0YMa.net] >>845 助手(他のスレッド)がタマネギを炒め終わるのをジャガイモの皮を剥きながら待つのがawait 手を止めてじっと待つのがWait awaitが画期的なのは、「助手の仕事が完了するまでは別の仕事をしつつ、完了後に やりかけの仕事の続きをする」という本来シーケンシャルでない手続きを、あたかも 「助手の仕事が完了したら続きをやる」という単純なシーケンスであるかのように記述できること
862 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:22:38.33 ID:p/SD7W260.net] async汚染に注意な
863 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:50:59.09 ID:wjo4lb340.net] awaitの正体は「Taskがすぐに終わらなかったらすぐにreturnする特殊構文」ってことを知っておけば理解はしやすいと思う Taskが終わったらさっきawaitしたところから(途中処理を飛ばして)再開する 関数先頭に特殊構文を使うことを明記(async)しなきゃいけない (FormとかWPFとかのGUIアプリなら裏で勝手にやってくれるから気にしなくていいが) Taskが終わった後にawaitから再開できるように呼び出し元のスレッドでDispatcher.Run()しとかなきゃいけない
864 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:19:00.14 ID:7kxnQq4mr.net] awaitは「あ!まって!」って覚えればいい
865 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:28:39.37 ID:RKF0PElVM.net] await 〇〇やっといてよろしく。私いったん席外すんで終わったら連絡ちょうだい。続きこっちで引き継ぐから Wait 〇〇やれや!終わるまで後ろでじっと見とるからな!はよせえよ! どっちがいい?
866 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:41:45.39 ID:S+vKlyc9a.net] Threadが一番わかりやすいw
867 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 20:51:42.02 ID:kkw3q4n30.net] たとえが分かりやすいですw イメージがわきました、みなさんありがとうございます! もう一点だけ確認なのですが、asyncメソッドのawaitよりあとのプログラムに移るタイミングですが、 メインスレッドでプログラムが実行中のときはどちらが優先になるのでしょうか?
868 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 20:57:28.48 ID:z01vGxpA0.net] >>853 OSの気分次第
869 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 21:26:41.18 ID:qmqxr6WH0.net] WinFormという前提でいうと まず前提としてメインスレッドではずっとメッセージループっていうループが回ってる でマウスの入力とか再描画要求はメッセージって形でキューに貯められる メッセージループはキューから1つメッセージを取り出してはアプリの実装に流してくる ちなみにその辺のシステムメッセージはWinFormだとMouseMoveとかPaintとかのイベントとしてアプリが対応することになる await以降の処理もこのメッセージを使って実現してるから メインスレッドの手が空いて次のメッセージを処理できる態勢になるまで待たされる
870 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 22:02:51.88 ID:p/SD7W260.net] スレッド 注意点一覧 ・シングルコアで動くか? ・応答がないときに自決するか? ・失敗時のメモリリークはないか? ・タイムスケジュールはあるか?(例:1分の内AスレッドはX秒、BスレッドはY秒等) ・生存確認方法はあるか? ・実行中の状態は取得できるか? ・ログは出力できるか? ・最大使用メモリは把握できているか? ・失敗時のリザルトの受け取り方法は適切か? ・処理が複数失敗する可能性は考慮できているか?(例:ファイルオープン成功→ファイル書き込み失敗→ファイルクローズ失敗→tempフォルダ削除成功のとき何が返る?) ・本体終了時に終了できるか?
871 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 23:49:44.87 ID:kkw3q4n30.net] ありがとうございました!
872 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 01:12:48.99 ID:XLpABEj80.net] C#のマルチコアなんたらっていう非同期処理のテキスト読んだらいいよ
873 名前:デフォルトの名無しさん [2022/01/30(日) 03:05:22.41 ID:2zm6GvSaa.net] async/awaitとTask.Runの使い分けが今でもよくわからん。。
874 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 09:00:16.50 ID:F79hzdqmr.net] >>856 それどこかに書いてあったな 5年くらい前の記憶でそのリストがあった
875 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 11:27:59.00 ID:zEfMsuv9M.net] それ多分C#じゃなくて組み込みとかの話だから参考にならんよ
876 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 14:20:38.52 ID:6d5Lec+00.net] >>861 え?どこにC#だと助かる要素があるの?
877 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 15:48:10.14 ID:WELts56MM.net] >>856 この記事の内容が組み込みc++じゃないのかと
878 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:06:41.10 ID:6d5Lec+00.net] C++だと駄目でC#だと助かる要素なんて1つもないけど 今まで何やってたん?
879 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:17:33.02 ID:nTSKdiu90.net] >>856 これスレッドに限らずどのプログラムにも言えることだと思うわ 出典元知りたい
880 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:18:42.01 ID:v/uLxU6j0.net] >>859 Task.Runとawaitは組み合わせて使うものだし、使い分けって何のことだろうか (同期する必要が無ければawaitしないことはある)
881 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:21:16.29 ID:cT0our3Wa.net] 助かるってどっかの方言なのかな。まったく意味わからなかったw ほぼすべてがc#(とVSの組み合わせ)で助かるか、マルチスレッド関係なくそのぐらい考えとけって項目
882 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:29:29.52 ID:6d5Lec+00.net] >>867 は?c#に特別なギミックなんてないが 君はスレッド使わないほうがいいね
883 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 19:59:30.72 ID:XMZDBma3d.net] またシングルスレッドおじさんの講釈が始まったのか
884 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 20:10:42.59 ID:Mi/4eGx6M.net] awaitのおかげで非同期書きまくる現代のプログラミングでこんなチェックリストいちいち考えてたら工数足りん それに現代の実行環境は優秀なんでほとんど考えなくていいよう出来てる C#もJavaScriptもそう C++とはもう時代が違う ・シングルコアで動くか?→普通に書けば当たり前に動く ・応答がないときに自決するか?→普通に書けばライブラリ側からタイムアウト例外出て落ちる ・失敗時のメモリリークはないか?→普通に書けばあり得ない ・タイムスケジュールはあるか?(例:1分の内AスレッドはX秒、BスレッドはY秒等)→大半のケースで環境に任せるのが正解。制御したいならより上のプロセスレベルで制御する ・生存確認方法はあるか?→死んだら例外でる出てないなら生きてる ・実行中の状態は取得できるか?→大半のケースで取得要件はない ・ログは出力できるか?→出来ないことなんてあるの? ・最大使用メモリは把握できているか?→環境に任せるのが正解。したいならより上のプロセスレベルで制御する ・失敗時のリザルトの受け取り方法は適切か?→例外で標準化されてる ・処理が複数失敗する可能性は考慮できているか?(例:ファイルオープン成功→ファイル書き込み失敗→ファイルクローズ失敗→tempフォルダ削除成功のとき何が返る?)→例外出たら止めろ。例外出ても進めるならしっかり設計しろ。そしてそれは非同期関係ない ・本体終了時に終了できるか?→普通に書けば猶予期間内に終了する。ロングランニングの時だけ気をつけろ
885 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 20:27:29.51 ID:MKtsah/wM.net] 各アプリケーションの機能テストで確認すべき項目と 非機能要求のテストで確認すべき項目と フレームワークの仕様テストで確認すべき項目と 全部ごちゃ混ぜだから分かりにくい タイムアウトを含め失敗時の振る舞いは一般的な品質レベルなら全部テストする項目
886 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 20:32:44.54 ID:cT0our3Wa.net] 組み込みになるとシングルコアで動くのにマルチコアで動かないとか、通信ライブラリが処理をつかんだままだとほかのスレッドが止まるとか(それマルチスレッドなのか?でも本当に起きる) そんな感じになっていくからな。特にFreeRTOSは・・・ c#だとlockとかを知らないと色々トラブル。そっちの方が重要だろ https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/statements/lock
887 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 22:57:40.72 ID:aiFnFmm30.net] doxygenって何処のスレで質問すれば良いですか?
888 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 23:50:15.42 ID:cT0our3Wa.net] スレ立てるまでもない質問はここで 158匹目 https://mevius.5ch.net/test/read.cgi/tech/1635193843/
889 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 00:03:34.26 ID:HAfOA5uC0.net] >>870 。oO(ああ、こいつダメだ、経験が少なすぎてなんも当たったことねぇのなw)
890 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 01:18:01.43 ID:rap/w09T0.net] GUIアプリ作るのにシングルスレッド縛りはありえねーって