ふらっと C#,C♯,C#(初心者用) Part158
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part157
https://mevius.5ch.net/test/read.cgi/tech/1669349768/
■関連スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします
http://www.visualstudio.com/downloads/
■情報源
https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://learn.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
++C++; // 未確認飛行 C
https://ufcpp.net/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured C#でググれって自己紹介なのに
しばらくC#でググっても上位に出て来なかったから焦ってるのか? やっぱりアンチじゃないですかー
999 デフォルトの名無しさん (オイコラミネオ MM49-3uzD) sage 2023/03/26(日) 13:01:14.46 ID:14FiY4OPM
単発うざすぎる
本人かよ
結局次スレのテンプレに入れてる
テンプレに入れても利用者は誰の得にもならないのに ここまで必死だと気持ち悪い
本人以外に考えられないよね 匿名掲示板で本人認定するのって、20年前の話じゃないか atmarkitのC#入門・・・・はもうバージョンが古すぎて勧められないよなあ
書籍だと独習C#が定番だったなあ・・・・と検索したら第5版(2022/7)でC#10.0まで対応するアップデートが入ってるみたいだ
著者も信用できるし最新の「独習C#」を買って読むのがいいかな
ufcppはさすがに初心者には酷だとは思うけど否定されるべきサイトじゃないような 古いと言えばdobonも古いよな
とはいえ、比較的新しい内容にまで追従していて初心者向けでそれなりに広範囲を網羅しているようなところが有るかといえば思いつかないが 今はもう公式サイトが充実してるから言語を新しく学ぶ人はまず公式から
逆引き的な調べ方をするときだけ外部サイトで補完したほうがいい 公式は機械翻訳がクソすぎるのがなぁ
初心者に英語力まで期待するのは酷ではなかろうか C#で書かれた、比較的著名なOSSプロジェクトって何がある?
活動が滞ってるものも含めて挙げてもらえるとうれしい(できればプロジェクトページへのリンク付きで) Bingチャット便利だね。ファイル整理とか言葉通りにすぐロジック組んでくれるし。
言い間違えたのか、無限にサブフォルダ掘られたことあったけど。 >>14
テキストファイルの中身に応じてファイル名を付け直したりフォルダを移動したり。 何年か前に独習買ったけど興味のあるところだけ読んだだけで7割くらいは手付けてないな
ちゃんと読んだら勉強になるんだろうけどあの分厚さを前にすると気が進まない 独習よりatmarkitのC#入門の方が合う人も多数いると思う
古いから現状にあってない場所が多いけど基本的な考えは違っていないと思う
書いてあることをそのまま読み進めるか誘導されて何か感じるかと言う面で違いがある
前にも書いたけど何冊も読めばいいと思う なんでこの子は未確認飛行にだけ当たりが強いのかね
不思議 どの本を読んでもどのサイトを読んでもいいけど、
安易にプログラミング言語学習サイト?と高額契約をしないようにね。
どんなのか知らんけど。 >>11
著名なOSSってほぼ完成してるからなぁ
個人的に欲しいのはOpenTKのWinUI対応だったりかなぁ
https://github.com/opentk/opentk オイコラは未確認飛行に何か恨みを持っていて敵視してるフシがある
妙に感情的になるし ++ c++になにも恨みはないよ
なぜか急に不必要に持ち上げる人間が急に出てきたのがキモイだけ
信者が出るようなサイトじゃないのに
がつがつワード出てくるしランク上げしてんのかと思うわ
本当に馬鹿らしい いや明らかにお前の方がキモい
不必要にサゲようとする明確な意思を感じる これが持ち上げランク上げとか認知バイアスにも程がある
アンチが出るようなサイトじゃないのに不思議 >>29
他言語をそこそこ扱えるならC#ではどう書くのか調べるにはいいと思うけど
プログラミング自体が初めてとかだとちときびしいかねぇ
入門とは銘打ってあるけども そんなド素人レベルだと>>1のどれ見ても無駄だと思う すみません、質問です
名前付きパイプを作りたいのですが下記のエラーが出てしまいます
Pythonなどだとエラーが出ないのでパーミッション関係ではないと思うのですが、
何が問題なのでしょうか?
環境 visual studio 2022
参考にしたサイト
https://learn.microsoft.com/ja-jp/dotnet/api/system.io.pipes.namedpipeserverstream?source=recommendations&view=net-7.0
エラー内容
System.UnauthorizedAccessException: 'Access to the path is denied.'
プログラム
private static void ServerThread(object data)
{
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe"))
{
}
} >>33
そのまま動かしてみたけどエラー再現しないなあ。learn.microsoftのサンプルで動いて自分のコードでエラー出るのならそこに書いてないusingの中身に問題があるのでは >>33
俺もMicrosoftのコードをそのまま動かしたけど、例外が発生せず動作する。
Windows 11、Visual Studio 2022、Administrator、UAC昇格なし。
サーバープログラムは普通のexe? それともWindowsサービス?
UnauthorizedAccessException と named pipe でぐぐったらちょっと引っかかるけど何か該当するのある? "testpipe" を変更しても同じになるか、とか、テストしてる PC を再起動しても同じかとか、気になるかも。 VSCode でもRuby とかやっていると、たまにある。
外部プログラムからフォルダへのアクセス禁止のダイアログが表示されて、それで許可する
VSCodeがバージョンアップされたら、また起こるのかも? >>34
不要なUsingを全て削除してもエラーがでました
Formアプリを作っているのですが、問題を切り分けるためCLIで試してみようと思います
>>35
ググってヒットしたやつも試しました
PipeSecurityクラスを使って云々とあるのですが、
VS 2022だとPipeSecurityクラスがなく手詰まりになりました
例えばこのページの説明:
https://stackoverflow.com/questions/3478166/named-pipe-server-throws-unauthorizedaccessexception-when-creating-a-second-inst
マニュアルにはあるんですがVS2022だとそんなクラスありませんとエラーになります
コンパイルのターゲットバージョン等が影響してるんでしょうか?
プロジェクトのプロパティを見てもターゲット指定箇所がなくて試せていませんが、、、
Visual Studio 2022の使い方で躓いているのかも、、
https://learn.microsoft.com/ja-jp/dotnet/api/system.io.pipes.pipesecurity?view=net-8.0
とりあえず、先に書いた通り CLI で試して、それでだめならVS2019に落としてみようと思います
>>36
パイプ名の変更は試しました
\\.\pipe\ を名前の前につけたりもしたのですがダメでした
PC再起動は盲点でした
試してきます
返信が遅くなりすみません
取り急ぎ、アドバイスありがとうございます >>38
>マニュアルにはあるんですがVS2022だとそんなクラスありませんとエラーになります
必要なassemblyが参照されてるかどうかを確認してみたら? >>38
パーミッション関係ではない可能性も高いけど、VS Code を管理者権限で起動して試してみるとか?
※手間が少ないので提案 VSのバージョンを疑うよりはターゲットフレームワークやアセンブリ参照を確認するのが先決ではなかろうか そもそもフレームワークのバージョン指定を何でやってるんだ?っていうのもあるけど
.NET Frameworkでも.NETでも基本セット内にあるアセンブリだから
普通にプロジェクト作成してたらあるはずだけどな CoreとかStandardでやってる可能性?
こいつらにはPipeStreamはあってもPipeSecurityは無かった気がする 何聞いてもそれなりに知ってる人がいるのはやっぱ凄いなここ PipeSecurityは.NET Core 2.1/2.2/3.0/3.1, .NET 5の場合は標準で入っていないから
nugetでSystem.IO.Pipes.AccessControlを入れる必要がある
learn.microsoft.comで適用対象が.NET Platform Extensionsになっているものはこのパターン すいません。どうしてもわからないところがあるので質問したいです
ヴィジュアルスタジオ2019つかっています
「開始」をクリックしてプログラムが実行はされるんですが、そのあと「続行」
という表示がでて、「開始」の表示が出てこず、プログラムを作成して実行することができません
どうすればよろしいでしょうか? >>49
いや、プログラムの実行は成功していて、エラーが出てる様子はないですね 意図せずクリックしてブレークポイントが設定されてそこで止まってるんじゃないかな
再開を押してみたら >>39-47
色々アドバイスありがとうございました
再起動では直らず、CLIで試したところ動きました
>>47 さんがご指摘頂いたようにUWPで作っているのが原因でした
WPFに変更したところ無事NamedPipe通信ができました
趣味のツール作りでUIが簡単に作れそうだと思いC#を試してたのですが、
マルチプラットフォームが意識されているだけあって出力ターゲットによって振る舞いが大きく変わるんですね
勉強になりました
皆様、ありがとうございました! きのう、レスの番号が48だった者です。
解決しました。「ビルド」から「ソリューションのリビルド」をクリックした後、
画面の中央に{デバックを中止しますか?}というコメントが出て、「はい」をクリックしたら
「続行」から「開始」へと切り替わり、プログラム作成画面になりました。でも、なぜでしょうか? 以前に「開始」したプログラムがまだ終了してなかったから アマゾンのKDPのダラダラ書いてあるC#とかの入門書に買う価値なしと☆1のレビュー付けたら著者が顔真っ赤にして開示請求されたわ
もちろん開示を断ったらそれまでだったが >>29>>31
正にプログラミング自体初心者だったときはufcpp筆頭にググって上位に出てくるサイトだけで習得余裕だったけどな
「いかがでしたでしょうか?」系のぺージはブラックリスト放り込んでたので必然的にほぼほぼufcppかdobonで学習していたが 最近じゃ AI がかなりいい回答を出してくれるそうじゃない。
もうすぐ AI 自身がプログラムを組んでくれるようになるだろうから、それまで粋がってればいいじゃない。 出力結果が正しいかどうか判断できる能力がないと使いこなせないぞ 自然言語対話エージェントによって「ソフトウェア設計の外注・検収の粒度」が劇的に小さくなった(作業者と直で対話するレベルに降りてきた)だけであって、今までと同じく成果物の正当性を判断できない人に(外注は)は使いこなせない みずほの案件はAIにやらせた方が人的被害少なくていいかも >>60
成果物の正当性を判断するテストや手順をAIに作らせることができるから使い手次第になるけど相当にハードル低いよ
自然言語で正確に要件が書けて
その要件をテストする方法を理解してればいい
テストといってもユーザーテストのレベルで概ね問題ない テストプログラムもAIに作らせるなら、それが正しいかは現状人間がチェックする必要があるな。
それをAIにやらせると、それをチェックするAIが必要になって収束しない。 ユーザ「操作もAIにやってもらうからどうでもええよ」 >>63
段階的に抽象度があがるので発注者/要求者の理解できる範囲に収束させられる
やり方によって質の違いはでるけど広い分野で発注者/要求者が十分と思える質が出せるようになる 似て非なるものが出来上がって来ることが多くてなかなか収集付かなそうだ
バグのある部分だけ修正とか器用なことは苦手なようだし いや、それって現状もそうなんじゃないかと。
確かに AI と発注者?の仲立ちする人材は必要だろうけど、それってどのくらいだろうね。
大部分は失業しそう。
・・・とか言うことを以前にここだか他だかで書いたときの反応とまるで違うのが面白い。それだけ現実的になってきたってことかな。 >>67
無理無理
設計書すら満足に書けねえのが現実
実はプログラムってのは
脳みそなんか使う必要ない
考えなければならないとしたら
それは詳細設計書が不出来だから
プログラムは常に
設計書通りに動くこと
をチェックすればいい >>68
設計者とただのコーダーを区別すればそうだな >>68
詳細設計書なんてアテにしてたら動かないものが出来上がる定期 フォームに設置したメニューのアイテムが20個以上あるのですが
それらのアイテムに割り当てるイベントも20個あります
アイテムごとにファイルを分けるためにpartialで分割するのはありでしょうか? 個人的意見だが、無しだな
見通しが悪くなるだけであまりメリットが無い
partialはIDE等の自動生成のためだけに留めておいた方が良いと思う 偏った書き方になるから万人受けはしないだろうけど・・・
・Form内に内部クラスとしてContextMenuStripを継承したクラスを宣言
・MenuItem(クリック時処理含む)をデザイナを使わず継承クラス内にすべて手書き
するのであれば、内部クラス1個ごとにpartialにする価値あり
内部クラスなんでformのprivateメンバも問題なく読み書きできて便利だから自分もたまによくこの書き方をする フォームのクラスに処理全部を書こうとするから見通しが悪くなる
フォームのクラスにはイベントハンドラと画面の制御ぐらいだけにして
残りは別クラスを作ってそこで処理をする
そうすりゃハンドラが20ぐらい並んでいても見通しが悪くなることはない 別のクラスにフォームクラスのインスタンスを渡してゴニョゴニョするのかな? デザインを別にするならだけど。
フォームクラスのイベントハンドラを1つにまとめて、sender だったかのパラメータでイベントの発生元を識別するようにする。
この手の処理はイベントの発生元に限らずだいたい同じなので、このイベントハンドラ内の処理を共通化してすっきりさせる。
これまでは大体これでどうにかなったな。 >>76
UI制御はフォーム側に書いておきゃインスタンス渡す必要なかろう c++clrから移住して最初につまずいた
c#難しい KDPのC言語本てステマが法律で禁止されたのにようやるなと >>80
バックグラウンドが違えば感じ方も違うだろ。
C++とC++/CLIの差分よりC#の仕様の方がだいぶ大きいわけだし。 昔Javaを多少触りはしたが基本的にC++とVB6しかやってなかったけど、C#移住全然躓かんかったけどな C#の名前にCがついてるから文法も概念も同じだと勘違いしてるやつが結構躓いてるぞ
最初から別物と思わないとstructとか使い方全然違うからな CPU言語は表層が違うだけでやってる事は機械語に解読してるからみんな一緒だろ
結局アセンブラでもBASICでも1つを完璧に知ってればなんとかなる
むしろ割り込みの仕組みとかシリアル通信とか基礎のハードウェアを知らんとヤバイ >結局アセンブラでもBASICでも1つを完璧に知ってればなんとかなる
こういう極論をしたがるの一定数いるよね JavaScriptですら最終的にはマシン語に翻訳されることを知らんとか同じコンパイル言語でもそれぞれできることが違うのを知らんとかも大概だし割り込みやシリアル通信はモダンな言語だとだいたい隠蔽されて考えなくていいようなライブラリがあるんでプログラミングしたことないやつが見栄を張ってるようにしか見えんのですわ >>90
javascriptはマシン語には翻訳されないよ
マシン語で動作している翻訳プロセスを介して動くけどな >>92
だからさ、Java自体がマシン語なんてもんにゃならないんだよw JavaScriptとJavaの違いも知らんとは恐れ入ったな あーおまえはパソコンの世界しか知らないからそうなんだなw JITコンパイラを一言で言うと実行寺にソースを機械語に直すコンパイラだ
このくらい今は常識だから覚えとけ C#の話か?
ソースからILという仮想機械の機械語に翻訳される
これをコンパイルと呼ぶ
しかし実際には仮想機械を立ち上げるわけじゃなく実行時にこの仮想機械語を実行環境の機械語にコンパイルする
この時に環境に合わせた最適化も行われるので高速動作が可能になっている
つまり事前コンパイラとJITコンパイラの二段構えなわけだ 初心者用スレでよくわからん自説を連投する様は、ただただ痛々しい よくわからんのはお前が頭悪いからだよ
常識だと言ったろ
初心者でもみんな知ってることだ 初心者相手だと思って雑魚が嘘ばっか並べてるスレだと嘘を見破れる人は心証悪いよなあ
すまんすまん
続けてくれ JITコンパイラという常識を語るとJavaとJavaScriptの区別もつかんような雑魚と愉快な仲間たちがワラワラ湧いて出て一ミリも反論できず心証云々言ってるのはなかなか笑えたよ
ほらどうした
初心者を騙してマウント取る作業を続け給えよ >>106
違う違う
主張の内容自体に対してどうこうじゃなくて
売り言葉に買い言葉ではそれまでの発言や立場を毀損するよって言いたかったのよ 別に反論するつもりも敵対するつもりもなくて
ただ憂慮してのつもりだったんだけど汲み取ってもらえないものかね・・・ ごまかし方が下手過ぎて笑えるが本気でやってんのそれ? > なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
> C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです CPUの基礎構造も知ってるとええで
アキュムレータとかスタックポインタとかプログラムカウンタとかレジスタとか言われてもわからんだろ
その辺の概念がわかるとどの言語も楽勝
割り込みも概念が解ってないと割り込みルーチンで長文書くとかアホなことしだす >>116
C#もJavaもJavaScriptも全然理解してないことが露呈したあとに
どの言語も楽勝とか言っても恥ずかしいだけですよ 無責任にデカいこと言った方が勝ちみたいなゲームはそろそろ卒業してほしい Z80アセンブラ→68000アセンブラ→C→C++→Java→C#→C++/CLI ときたのでつまづかなかった。
あとTcl/TK、sh、Perl、JavaScript、PowerShell、Python。
Rustを試したいが時間が取れない。 >>121
Z80時代はハンドアセンブルしていた。まだ小学生でアセンブラを買う金がなかったので。
よく使う命令は16進の値を覚えていた。 RET C9 サイクル10的なのを覚えてたんだろ
ノートに相対ジャンプのアドレス計算書いたり
それで言語ができると何の関係があるんだろうか? >>122
その当時の普通だ
プアな環境でハンドアセンブル繰り返してりゃ自然に覚えるわ
そこから数十年かけて全く進歩できてないのは無能としか言いようがない
お前の培った技能は今全部自動化されてるんだよw
コンピュータはお前より遥かにハードを使いこなして上手に最適化するからお前は完全に無用の長物というわけだ マイコン
オーディオ
アマチュア無線
80年代頃の趣味の最先端 Z80は拡張命令があって命令数が腐るほどあったから全部覚えてられなかったよな? >>127
それってどれも手段であって趣味ではないよね
その最先端のを使ってどんなコンテンツを楽しんでるかが趣味なんだよね
きっとろくでもないんだろうね その後90年代あたりからオタク化するか理系エリート化するかが人生の分岐点 何でもいいからとにかく人に噛み付きたいみたいなのはそろそろ卒業してほしい まだ専攻分野で情報分野を扱う大学なども少なく大体は電気科か電子科で学ぶものが多かった時代 こんばんは
専門学校で情報処理を2年間学び、今春からIT会社入社です
学校ではC#を学び、それを活用できる会社に入ったのですが、上司からC++が中心と言われてしまいました
使用感としてはC#と大差ないと言われたのですが、実際にどちらも使用したことがあるPGさん目線ではどんな感じでしょうか 大差ないとか大嘘で草
テンプレートスパゲティの洗礼を受けるがいい あとC++はまともに日本語が扱えない
C#と用途が被ることってゲームくらいじゃね >>134
お前落ちこぼれだろ
金と2年間も時間を使ってC#とC++の違いもわからんとは使いものにならんわ ていうか派遣か超絶ブラックな気配しか感じないわ
まともな企業なら会社が就職希望者を選抜するがお前の会社は嘘をついて人を集めてる
こんなわかりやすい地雷が見えてるなら地雷も一つだけじゃなく他にも心当たりあるだろ >>134
素人には見た目は同じように見えるかも。
C# では考えられないような罠があちこちにあったりするから最初はタイヘンかもしれないけど、頑張れ。
コツが分かればかなり自由にいろいろ出来て、自分的にはかなり好きな言語なんだけどね。 断言しておくけど専門でC#の学習経験しかない奴にC++の案件は100%こなせない
今後C#案件が自分に回ってこなさそうであれば完全に入る会社を間違ったな
あーあ経歴にさらに傷が付いちゃった 専門学校でC#を教えてるなんて
選ぶ学校間違えてる
そんなところに行かなくても独習でとは思う まーたっくの初心者で趣味でC#やろうとしたが言語仕様の壮大さに負けてKotlin~Flutter目指すことにしたサヨナラ 一つの言語すら怖気づくやつが目指しても無駄だけどな 言語仕様はそんなに壮大じゃ無いが、使えるクラスとメソッドが異常に多いし、クラス毎に出来る事が偏ってるから面倒だとは思う winformsとかwpfとかuwpとかxamarinとかmauiとかunoとかblazorとかアプリ用フレームワークの乱立と迷走が酷いのは事実
さっさと統一しろおら MS<もうWinFormsは機能強化しないって言ったのに、みんな使い続けてる・・・ WinFormsまた機能強化しますと言えばいいだけのこと >>141 だいたいの専門学校の情報処理科だとC#は必ずやってるもんだよ
はよやめろとも思うが需要がそれなりにあるんだからしゃーない MS<機能強化はしないと言ったけど、仕方ないから高解像度に対応してあげるからね
MS<機能強化はしないと言ったけど、仕方ないからUWPのライブラリを呼べるようにしてあげるからね
地味だけど大きい改良してるんだよなw がっこうって四則演算とコンソールアプリ程度ジャネーの?
しらんけど youtuber育成科でもあったら受講してみたいな
引退後はお喋り配信でもして暮らしたい すいません
本に書いてあったコードで質問があるのですが、
d(オブジェクト名).Text (プロパティ)="変数aの値は"+a+"です。"
というコードを打ってもエラーが出ます。
本には「この2つの+演算子の一方のオペランドには“ “でかこまれた文字列の値が含
まれています。このとき+演算子は四則演算の加算ではなく、
文字列として連結するという処理を行います」
とかいてありますが、なぜ
変数aの値はaです。
という文字が出ず、エラーが出るのですか? >>156
なぞなぞかな?原因をそれだけでエスパーしろと
dがnullの可能性、aが定義されてない可能性?
ともかくエラー内容というか把握している情報くらい書いてくれ 馬鹿ってエラーメッセージも提示しないよな
馬鹿過ぎるから、オブジェクト名とかプロパティとか全角()を打ち込んでいそう どこかで間違えてるからでしょう
とりあえずエラー内容を書いてください
あと
これは打ち込んだコードをそのままコピーしてませんよね?
全角文字と半角文字が混ざってて普通は動きません
行末に ; を付けましょう
それと変数aの値はaですか? >>155
メニューやボタン類がICommand対応になる的な 質問者の人はビビらないで続けて欲しい
誰でも最初はこんなもんだ
一番の馬鹿はテンプレが読めず初心者相手にマウント取るしかできないんでそういうのは無視でいい 5chで聞くとこうなるのがわかってるのにアホなのかな? ありがとうございます
原因調べてみます
たぶん;の付け忘れか
型名 a
というふうにaを変数化してなかったからだと思います。 >>165
いいんだよ
解決しなくても話し相手になればそれで満足して帰ってくれるんだから
車のエンジンがかからないからどうしようと女に聞かれたらバッテリーがどうこう言っちゃだめ
同情して雑談するのが正解 >>168
マックのシェアが上がったのはそういうわけ 以前17歳の少年にmacはwindowsも動くから開発するならmac一択でwindows機は買わなくていいって言われたよ
そういう理由でユーザーを増やしてる面もある
情報系の大学ではmac持ってる生徒が多い 自分はmac上のwindowsでしか起こらないバグもあるかもしれないから意味ないと思うと答えたが
そんなの言いだしたらきりがないなと後で思った Windowsのライセンスを用意してMacで動かすくらいなら、
安いWindows PCも買ったほうが同時に使えるし便利だと思う。 >>134
プログラミング言語は複数覚えていったほうがいいから、まあ頑張れ。 文法が似ているだけで、C++とC#とでは必要な知識の幅が全然違うような気がしてしまう C++と言っておきながら、実はC++/CLIだったりするとさらに大変。 C#がイニシアチブ取れる最大の理由はライブラリやクラスメソッドの豊富な点
CやC++は環境依存が高過ぎて無理だった C#は実行環境が基本Windowsで処理系も1個しかなく
外部が作った最大公約数的な規格やらに振り回される事もないからね
言語の在り方としてはDelphiからC#まで設計の中心に居たアンダースヘルスバーグの影響が一番でかいだろうけども へじたんというかボーランドから引っ張って来たグループ全体の影響だね
へじたんは10年ぐらい前にtsに行っちゃって多分だけどずっといない
tsの改善提案もたまにする
twitterでts10周年について言及してたけどC#は言及されない c++はパフォーマンス目的じゃないと使うべきじゃないかな(個人の感想です)
でも本当にパフォーマンス目的なら積極的に使うべきで地球の温暖化予防になる
.net frameworkの古い部分はc++的に書かれてるところが点在してる
変数名とか…
ヘルパークラスの中身に多い気がする
そもそもがC#はデビューしてなかったんだからMSの中にいたのは大部分がCかC++プログラマだったから仕方がない >>183
>そもそもがC#はデビューしてなかったんだから
なぜこういう嘘を書くのか >>184
え?どこが嘘だと思った?
はっきり指摘してくれよ
C#発売前にどうやってネイティブのC#プログラマ募集すんの?
2002年にC#が発売されたんだけどその時,net framewarkはついていた >>185
MS内部の開発は何を使ってると思っているんだ?
それとも発売されないと内部で使ってはいかんのか? >>186
話がかみ合ってないと言うかなんでIDコロコロしてんの?
それとどこが嘘なのかはっきり書けよ
,net frameworkを開発したときにC#で書いたプログラマはもともとなにプログラマでしたか?
ネイティブC#プログラマじゃないでしょ?
おそらくCかC++(それかボーランドから流れて来たobject Pascalプログラマ)じゃないの?
だから.net frameworkのソースにC++のような名残が多いんだろ?
C#ブートストラップも最初からC#で書いてたと思ってそうで怖い MS内部の開発者の多くはCかC++プログラマ
それまで存在しなかったC#で書かれた.net frameworkのソースを書いたのはC#を覚えたその人たち
どうしてこんな簡単なこともわからないんだよ >>187
馬鹿って例えばDelphiのライブラリは何で作ってあると思っているんだ? C++からC#を覚えたんだけど、ヘッダー不要、メモリー解放不要ってだけでほれぼれしたわ >>189
いい加減に理解しようよ
新しい言語が出来てその言語でライブラリを書く人は他の言語の経験がある人だろ
プログラムもOOPも始めての人間には不可能てわかるだろ
もちろんその言語は初心者で他のプロジェクトなんて経験してない
なんでこの人は小学生並みの思考力もないんだろうか? 今、画面をC#で作って、性能が必要な部分をCで書いてる。実質C++みたいな書き方してるけど。
固定長配列でよいところは固定長にして余計はメモリ確保・解放を排除、
スタックを使いすぎないようにTLSにしたり、
スレッドプールで実行スレッドがコロコロ変わるけど同一スレッドの間だけTLSを使ったり。
性能は良く、ワットパフォーマンスも良いと自画自賛しているけど、
書くのに時間がかかるし、メモリ管理で二重Freeや誤って0バイトメモリで変な落ち方して
調査に時間がかかった。 C言語はB言語で書かれたが直ぐにC言語で書き直されたという
故にC言語のライブラリはC言語で開発されている
と、例外中の例外を書いてみる セルフホストは別に例外じゃないよ
コンパイル型の言語は最終的にセルフホストになるだろ >>153
>MVVM ツールキットの概要
>このパッケージは .NET Standard を対象としているため、任意のアプリ プラットフォーム (UWP、WinForms、WPF、Xamarin、Uno など) で使用できます。
いつの間に対応してたんだ・・・
これでInvokeしなくて済むのか 下記のコードでcomboBox1.Textに"a2"を設定しているのですが
comboBox1は"a"のままです。設定を反映する方法はあるでしょうか。
public Form1()
{
InitializeComponent();
comboBox1.Items.Add("a");
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.Text = "a2";
} comboBox1.Items.Add("a2");
これを先に書かないから変更されない >>196
まずcomboBox.TextとcomboBox.Itemは別のプロパティでTextを変えても表示されない。表示されるのはcomboBox.Item
Item"a"を選択したときに表示を"a2"に変えたいということなら
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;//Indexを変えるのでイベントを外す
if (comboBox1.SelectedIndex == comboBox1.Items.Count - 1)//登録されている最後のIndexを参照する
{
comboBox1.Items.RemoveAt(comboBox1.Items.Count - 1);//Itemコレクションの内容を変えるために元のアイテムを削除する
comboBox1.Items.Add("a2");//"a2"を新しく登録する
comboBox1.SelectedIndex = comboBox1.Items.Count - 1;//コレクションの内容を変えるとIndexが変わるのでIndexを指定する
}
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}
たぶんこのくらい必要 comboBoxのテキストを変更できるようにするプロパティがあったよね? >>196
BeginInvoke(new Action(() => comboBox1.Text = "a2")); comboBoxの者ですが例示頂いたサンプルコードで期待の動作をしました
ありがとうございます
.Textのセッターで書き換えられたら直感的だなと思いつつ別の仕様で都合悪いんでしょうね 大学だとmacは買うなと名指しで書かれてた
買うのはWindows11入りi5以上RAM8G以上のoffice付 365のアカデミック垢(Education A3/A5)を配布してない大学なんだろうか? officeは大学によって配布とそうじゃないとこがあるな
合格通知に付いていたパソコン購入の栞にはどこも同じようなスペックを書いてあった
毎年トラブルになってるらしくmacは非推奨、忘れてたけどSSDを強く推奨されてた。 >>203
情報系大学ならOS問わず乗り越えて欲しいよね
強いて言えばニンテンドースイッチをハックしてOffice365動作させるくらいの気概が欲しい CPUが非intelな時点で選択肢には入らんでしょ >>207
SSDをSODと空目して、時間を止めるボタンを購入しちまう人もいるだろうさ 経済学部とかならOS関係なくクラウドで全部出来るけども、
情報系なら機器制御とかもやるから、OS問わずは無理だろ 授業内容によってはMac非推奨もあり得るだろう
ただどこの大学のどの学部なのか書かないことには、何に向かないのか参考にもならないだろう ワッチョイ 6e10 3回
サクッテロロ Spd1
ワッチョイ 495f
ワッチョイ a9e5
オッペケ Srd1
ワッチョイ 412d
ワッチョイ 4642
ワッチョイ a9e5 2回
ワッチョイ c5ae
ワッチョイ eebb https://books.google.co.jp/books?id=4CJdEAAAQBAJ&pg=PA112#v=onepage&q&f=false
の内容に関しての質問なんだけど、
Fooのコンストラクタをstaticコンストラクタに書き換えると、何で3 3になるの?
Console.WriteLine(Foo.X); // 3
class Foo
{
public static Foo Instance = new Foo();
public static int X = 3;
static Foo() => Console.WriteLine(X); // 3
} なんでってConsole.WriteLineが2回呼ばれてんじゃん >>217
いや、だから static を付けない場合は、最初の出力は 0 なんだって
で、何故 static を付けると、3 になるかという事を聞きたいわけ 何がわからんのかマジでわからん
初期化したらそれが出力されるのは当たり前じゃね? >>219
で、static を付けた場合と付けなかった場合の出力結果の違いはどういう理由? >>220
デフォルトコンストラクタ Foo() の直前の static の事ね どこにstaticつける話をしてるのか知らんけどクラスメンバーかインスタンスメンバーかの違い
静的コンストラクタはクラスメンバーがアクセスされる時点で初期化が終わってることが保証される >>221
それはコンストラクタじゃなくて静的コンストラクタだぞ
多分その本のもっと前に書いてある >>222-223
staticを付けない、コンストラクタの場合、class Fooの最初の行でインスタンスが生成された時点では、Xが3に初期化されてないので、0になるが、
staticを付けた静的コンストラクタの場合、class Fooの最初の行とは無関係に、既にXが3に初期化された状態で Console.WriteLine(X) が実行済みなのね
public static Foo Instance = new Foo();
をコメントアウトして実行させてみて、やっと気付いた
有難う 1: Console.WriteLine(Foo.X); // 3
2: class Foo {
3: public static Foo Instance = new Foo();
4: public static int X = 3;
5: static Foo() => Console.WriteLine(X); // 3
6: }
静的コンストラクタのあるクラスの場合は
静的コンストラクタが実行される直前に静的イニシャライザが定義順で実行される
1行目のFoo.Xで静的コンストラクタがトリガーされるけど
その前に静的イニシャライザが3行目、4行目の定義順で実行される
3~4行目の実行が完了してから5行目の静的コンストラクタが実行されるのでXは3
3行目のnew Foo()で実行されるのはインスタンスコンストラクタで
staticがついた5行目の静的コンストラクタとは別のものになる そもそもこんな使い方することってある?
こんなわかりにくい実装したらバグしか生まないだろ どういう順序で実行されるか解説するテキストで実験的なコードが紹介されてるだけだろ
本文が3行以上読めないやつがここで聞いただけ どちらかと言うと本文を読んでいないのが >>229 でみんな雰囲気で答えてるだけ
英語嫁 バグしか生まない実装を紹介する本ねぇ
読んだと自称するやつにはそう見えるのか
春だなぁ 実際質問の出力結果示さずにこのスレの連中にstaticありなしの出力結果予想させたら3割も正解しなさそう C#の挙動がなぜそうなってるかの理由を知ることと、それを実際に開発に使用するかどうかは話が別だろう
当の本もこの挙動を利用して実装しろと勧めてるわけでもなし、バグしか生まない~などと腐すのも筋違い 本に書いてあるコードでは>>225の5行目にstaticはついてない
3行目と4行目を入れ替えると出力結果が変わるようなことになるという注意を促して
イニシャライザの実行順序を理解させようとしている
static fieldの定義順に依存したコードはアンチパターンと言ってもいい気はするが
現実には↓こういうコード書く人がいるので動きを理解してることは重要
https://stackoverflow.com/questions/54692923/ 本にはこのコードのstaticはついてないのでいくら読んでもそういう話にはならない
コード提示した人が自分でstaticつけて疑問に思ったことを書いてるだけ
チャンと英語読めば批判してる人の脊髄反射でしかないとわかる >>232
英語嫁と上で書いてやったのに読まない馬鹿 >>232
ごめん自分が読めてなかった
自分が馬鹿だったわ… 過去にはAny CPUを選ぶと32bitライブラリか64bitライブラリかわからなくてエラーになる事があるから、
x86かx64に固定するのを推奨とかどこかで見た気がするけど、
今はそんな事無くなったのかな? ifで非null判定してからアクセスしてんのにnullの可能性がありますとか警告出す最近のC#はほんとクソ コンパイラのnullチェックを混乱させる凄い(≠素晴らしい)コードなのかもしれない 多分チェックした後に別の値を代入するか値が変化するものを使ってるんだろうな
たとえばプロパティは一回目のアクセスと二回目のアクセスで同じ値が得られるとは限らない
変数に入れろ
そしたら多分警告消えるから 警告が消えるのに時間がかかったり、Visual Studioを立ち上げ直したら警告が消えたことがある。 不必要なhoge?.hage();が残っているとnull判定されることがあるね
?取るとワーニングが消える hoge?.hoge()はhoge!=null?hoge():nullと同じ
nullが返る可能性があることを示すコードだからそりゃnullの可能性があると判定されるわな >>250
問題はhoge?.hoge()のところではワーニングが出ずに、離れた場所にあるhoge.bar()でワーニングが出るから
知らないと混乱するってことだね そこで問題がないのに出るわけないじゃん
離れた場所にあるなら一度変数に入れなよ
そしたらnullの可能性があるかどうかマウスホバーで教えてくれるから 結局この警告はバグを潰してくれてるものだから文句を言うのは筋違いだぞ
本来なら警告の代わりに実行時エラーになってたものだからな >>252
コンストラクタなどで初期化していて本来はワーニングが出るはずがないのに
途中でhoge?hage()なんてコードがあるからヌルが入る可能性があると判断されるようだ
だから?を外すと解決するんだが、それに築くのが大変って話ね そこでnullを代入してるのに気づくのが大変てことはないと思うがな
警告が出ないなら大変かもしれんけど たとえばUnityなんかだと暗黙の代入演算子をいじっててnullでないものがnullエラーを出すよ
コンストラクタで生成してすぐnullになるオブジェクトも作れる
そういうのを実行前に警告として教えてくれてるんだから親切以外のなにものでもないだろ
警告があれば何か問題があることにすぐ気づけるし気づいたらマウスをちょっと動かせば原因がわかる
コーディングが簡単になりこそすれ難しくなることなんかないだろ nullableなboolean変数を条件判断させるとき
nullだったらどっちに判定されるんだ? もうnullだったら死んでくれていい
プログラムでぬらぶるってるとムカつく
いいんだよ例外でもなんでも死ねば プログラムの99.998%は概ねnullになんかなんないところばっかりなのに
なんでこんなクソ構文作ったのかわからん
現場で書くと嫌われるコード
こんなもんチェックするより他にやることはいくらでもある DBだと伝統的に3値だったりが当たり前
かなり問題がある作り FormアプリでForm1とForm2を作る
Form1にラベルを作る
Form2にボタン1,ボタン2を作る
ボタン1を押すとラベルに"1"ボタン2を押すとラベルに"2"を、
Form2を閉じることなく設定するプログラムを作りたいのですが
どういう作り方をすれば実現できるでしょうか。
Form2にプロパティを作りForm1で文字を受け取る方法だとForm2を閉じないと値が設定できません。
よろしくお願いします。 >>268
記事中のOwnerプロパティを使うことでやりたいことができました。
ありがとうございます。 自作メソッドが投げる可能性がある例外の表記方法についての質問です。
ドキュメンテーションコメントの<exception>タグに、throw する可能性がある例外を表記出来ますが、
例えば下記のメソッドの場合・・・
void MyMethod(string filename)
{
//ZipFile.OpenRead() メソッドと、StreamReader.ReadLine() メソッドを使用する。
}
上記の場合、
ZipFile.OpenRead() は下記の例外を throw する可能性があります。
ArgumentException
ArgumentNullException
PathTooLongException
DirectoryNotFoundException
IOException
UnauthorizedAccessException
FileNotFoundException
NotSupportedException
InvalidDataException
StreamReader.ReadLine() は下記の例外を throw する可能性があります。
OutOfMemoryException
IOException
こうなると、MyMethod() は、上記の計11種類の例外を throw する可能性があるという事になるのですが、
理想論的には、全てをドキュメンテーションコメントの <exception> に表記する必要がありますか?
そうでない場合、表記するべき例外と、そうでない例外はどういう基準で判断すればよいでしょうか? >>271
めんどくさいから例外を吐くMethodを記載して、詳細はソチラでにしちゃうかな >>271
例外なんて元々どんぶりなんだから
そんな厳密に何かやろうとするなら
そもそも使うなでFA ZipFile使ってること書いてそっち参照とし、独自のは詳細書くとか? 書いたことがない
自分で使うなら覚書として必要な範囲で
他人に提供するライブラリでも普通は書かない
使われないし必要とされてないから
常識的にそれが何をしているか想定できる場合は書かない
今だったらファイルアクセスしてますよとか引数を取りますよで利用側もある程度想像できる
標準ライブラリの例外でないものを投げる可能性があり
それに回復手段がある場合に書くぐらいなんじゃないかなと ドキュメンテーションコメントなんか書いたことないな・・・ ウチはコーディング規約で必須
どこも書いてるかと思ってたけど違うんだね 今はドキュメンテーションコメント書いたらコパイロットがコード書いてくれるんじゃね JavadocやDoxygenってゴミにしかなんなくね? 質問なんですが、コントロールのボタン1~9のイベントハンドラを全部実行したいとき
Button1_Click(null, null);
Button2_Click(null, null);
Button3_Click(null, null);
Button4_Click(null, null);
Button5_Click(null, null);
Button6_Click(null, null);
Button7_Click(null, null);
Button8_Click(null, null);
Button9_Click(null, null);
これをもっとスマートに書く方法ありますか?
それとも20個程度ならダラダラ書いたほうがいいですか? ViewModelも使わないような泥縄式プログラミングならダラダラ書けばいんじゃね
インスタンスを何らかの方法(前もって配列に入れるとかタグをつけるとか)でフィルタリングすればループが使えるし何ならイベントハンドラ自体一つにまとまるくらい同じことしかしてないんじゃないかとも推測できるが あとイベントハンドラを直接呼び出すのは良くないぞ
イベントハンドラの中から実際の処理を行う関数を呼び出すように作ってイベントハンドラを他の関数から呼びだしたい時には代わりにその処理の方を呼び出すんだ どうしてもハンドラの方を呼び出さなきゃいけない時はButton.PerformClickな >>284,285,286
サンクスです、まずViewModelがわかりません。ググルとandroidやzamarinの事がヒットします。
windowsのformでプログラム作ってます。もうちょと調べてみます。
イベントハンドラの中のメソッドを呼びだすのですね、Button.PerformClickと迷ったのですが
2つの違いがいまいちわかってなくて、もらったアドバイスでもうちょと考えてみます 適当なコレクションに入れてforeachでperformclickだな >>288
レスサンクスです
List<Button> buttons = new List<Button>();
for (int i = 1; i<10; i++)
{
Button button = new Button();
foreach (Button button in buttons)
{
button.PerformClick();
}
こんな感じでしょうか(途中で挫折した) フォームに他にボタンが無いなら↓でもやれる
foreach(Control childItem in Controls) {
if(childItem is Button button)
button.PerformClick();
} まずボタンから処理を分けようか?
リファクタリングでメソッドに書き直そう
private void Button_Click(object sender, Args e)
{
//ここは実際に何かやってるが仮にコメントにしてある
//
//ここまで
}
仮にこんなコードだとして
//から始まる3行を選択して右クリックすると出てくるメニュー上の方に "クイックアクションとリファクタリング" というのがあるから
それをクリックすると "メソッドを抽出する" と言うのが出てくるので選ぶ
そのあとメソッド名をつけるだけでイベントハンドラじゃなくて単純なメソッドになる
ボタンをクリックしたと言う名前じゃなくて処理にあった名前にできるしそうするべき
いちいちボタンNが何をしていたか調べたり覚えなくて済む
こういうふうにしてあちこちの処理を簡単にメソッドにできるので
処理の区切りでメソッドにしよう
処理に名前を付けて流用できるようにしよう >>290
レスさんくすです
こんなシンプルにかけるんですね、ちょと理解がむずいところがあるけど
これをもとにちょっといじくってみます
>>291
丁寧な解説ありがとう
なるほどイベントハンドラからメソッド切り出すのはこうすればいいのですね
他からメソッド呼び出すとき意味も分かりやすく、見通しもよくなりますね
リファクタリングはやったことなかた >>292
これだけできるとコードの書きやすさが格段に上がるよ
メソッド内全部じゃなくてもいい
適当に切り出しても引数とかもちゃんとくくりだしてくれる
出来ない場合は理由があるのでそれも勉強になる
失敗してもアンドゥしたらいいだけだし >>291
こんな機能あったんか…。知らんかった。 >>291
こんな機能知らなかった
勉強になったわ それっぽい名前を付けるのが一番面倒だから
そこは処理をAIに要約させて付けて貰う
完璧だな 非同期メソッドを実行する時「戻り値は特に必要ないが、例外は伝えてほしい」という場合、
戻り値は適当に int とかにしても問題ないでしょうか?
理想的な方法があれば教えてください。
例:
public Task<int> SomeMethod()
{
return await Task.Run(()=>
{
try
{
//非同期で実行したいメソッド。
return 1;
}
catch
{
throw;
}
});
} 戻り値無くても例外は発生するぞ
ていうかthrowするだけならtry要らないだろ public async Task SomeMethod() >>300-301
ありがとうございます。
本当に助かりました。 >>300
以外と例外処理って勘違いしてる奴が多いんよ
例外が発生する可能性がある場所にtry catch書くべきって思ってる奴が7割ぐらい居る
正解は例外が発生した場合にリカバリー処理を書く場合に使用する そのままの意味どうすよ
回復や復帰を意味する言葉通り
例えば通信中に環境が悪く回線切断
例外からそれは分かるので回線が繋がりやすい場所は移動する様にメッセージを出した後に再接続して通信を続行させる UIソースでtrycatch書くための仕組みだろ
返せる例外は複数も行けるけど1つしか想定してないからどんぶりの類
本処理中と終了処理があるような処理は想定外
終了処理は行われないで帰ってくる
厨房の工作キット まあ、自分の業務だけが全ての人は知見が狭くてかなわんなw 復帰とも書いてるから、例外の伝播をそこで止めて通常動作に戻すこと全般を言っているんなら
大体合ってるんじゃないかな。 try catch はリカバリー処理とかユーザー通知も含めて、"例外が起きたら何かしたい" 時に使う物くらいにしか考えてなかったなぁ。
void Method() {
try {
処理
} catch (Exception ex) {
//if (この場で復旧処理したい) { 復旧処理 }
//if (メソッド呼び出し元に例外が起きたことを伝播したい) { 例えば、throw する }
//if (ログを出力したい) { ログ出力する }
//if (別のプロセスを起動したい) { 別のプロセスを起動する }
//if (その他諸々何かしたい) { その他諸々何かの処理 }
} 相手サーバーに拒否されたとかそのままコケて欲しい時はcatchしなくて良いしな 質問いいですか?
form1からform2を呼び出して、form2からform1のbutton1をクリックしたい
public partial class Form2 : Form
{
private Form1 _form1;
public Form2(Form1 form1)
{
InitializeComponent();
_form1 = form1;
}
}
ここでform2から
_form1.button1.PerformClick(); //うまくいきます
Button selectedButton = (Button)_form1.Controls["button1"];
selectedButton.PerformClick(); //うまくいきませんnull >>313
途中で投稿してしまった
これはなぜうまくいかないのでしょうか? 別フォームからクリック出来たよ。
ソース全体が不明だから何とも言えないけど、
1. Form2 クラスの form1 ・ _form1 変数は、ちゃんと Form1 のインスタンスを参照出来てる?
2. 自動クリックされる Form1 のボタンは、ちゃんと Name = button1 になってる? >>315
サンクスです、文法問題ないのだったら、ここに書き漏らしてる何かが悪いのだろうか
>>317
さんくすです、うまくうごくのですね _form1 は
_form1.button1.Text = "hogehoge";
がうまくいくのでインスタンスを参照できてるかな、NameもVSのプロパティそのままで >>319
俺への回答でしょうか?試しに
(Button)(_form1.Controls["button1"])
みたいにやってみたけどうまくいかず 「うまくいかない」の内容をもう少し詳しく書くようにしよう
何も起こらないのかそれともエラーが出るのか
エラーが出るなら具体的にどんなエラーメッセージなのか >>320
もしかしてForm1のPanelとかの中にbutton1が入ってるんじゃ
そしたら_form1.panel1.Controls["button1"]よ >>322
失礼しました、例外がスローされます
selectedButton.PerformClick();のところで止まってselectedButtonがnullみたいです
System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。' >>323
ビンゴでした、うまく動きました
グループボックスの中にボタン入ってました、こんなのいるんですね
ありがとうございました >>325
名前はインテリセンスで出てこないから要注意ですね
一応単語を選択すると同じ単語が色分けされるから、そこで確認しました テキストでコントロール指定したりPerformClick()使うのは最初だけだから
初心者だからなんでも使えばいい
そこから出られるのかどうか >Controls["button1"]
こんなもん使うなカスボケってことは理解できたんかな? まあ他人の実際のコードを見るようになってからじゃね
自分で書いて動かすだけで手一杯なんやろ 自分は、DataGridViewColumn.DataPropertyName でプロパティ名を文字列で指定してカラム参照してるわ。
本職はプログラマーじゃないから許してクレメンティン。 別に良いんだよ
馬鹿なプログラマはこうするべきだってって感じで言うけどただの無能
動けば良いんだよ
実際売れてるとか人気のアプリのコードなんて糞みたいなもん
音楽で考えると分かりやすい
人気の音楽や長年聴かれる音楽って結構シンプルやろ
ギターとかの超絶テクニックやら奏法が特殊なら良い音楽かって言えば違うやろ
実際はミリオンセラーの音楽なんて小学生が少し練習すれば弾ける様になるのが結構ある エンタメとソフトウェア技術を同列に語っちゃう人
例え話って自分に都合の良いものを引き合いに出しがち 同じやで
都合も良いも無いやろ
何の為にソフト作るんや
使う側にして見りゃ中のコードが糞かどうか関係無いやん
ちゃんと動いて結果が出れば良いだけなんだから アレかなもしかしてエンジニアって勘違いしてるパターンか?
俺らって大抵はエンジニアじゃなくてサラリーマンだぞ >>334
音楽で考えるとわかりやすいんじゃなく音楽と違うものを音楽にしてしまったことで話が変わってるだけだぞ
プログラミングはロジックの塊
音楽より論文に近い
思いついたことをまとまりなく書き連ねたらダメ出しされるのは当然だろ
小論文ならそれでもまだ読めるかもしれんがな >>338
動けば問題無いよ
論文と違って無駄があろうが何だろうが結果が正しければ良い
例え途中が間違っていても奇跡的にでも結果が正しければ問題無い
お前の例えの方が全然違うやんw
無能やな 楽しければいいんだよ
法律やルールなんてくそ食らえ
…とかいう人なの? 違うぞ
ルールや法律に違反しなきゃ何やっても良いって言ってるだけや ついでに言うならペナルティが罰金の場合
罰金払ってでも儲かるなら違法な行為はする
ちなみ大企業は堂々とそういう事してる
例えば特定保健指導の実施率のペナルティ
大企業だと自身で保険組合持ってる場合が多い
従業員も多く色々な対策に金使うよりペナルティ払った方が安い場合もある
そういう場合は普通に違反してペナルティ払ってる
一例を挙げるならトヨタがそれに当たる 「正しく動く」は単なる前提に過ぎず、目指すものではない
エンジニアリングにおける「Easy」と「Simple」を区別できないおじさんは淘汰される そう言うなよ世の中の7割はルールに従って真面目にやれば出世や稼げると勘違いしてる無能なんだからさ
有能で稼げる奴は法律やルールでさえ損得を天秤に掛けて儲かる場合は普通に違法行為を行える
勿論逮捕とかされるような事案には手を出さないが1億10億の罰金払って100億稼ぐのが有能 >>329
PerformClick()使う理由は
ADIR01P USB赤外線リモコンアドバンス
https://github.com/bit-trade-one/ADIR01P-USB_IR_Remote_Controller_Advance
このアプリをいじって、追加機能やform2でボタンだけのコンパクトなUIが欲しかったからです
>>330
確かに気持ち悪い感じはしますね、form2で10個ほどのボタンにtagつけて、
対応するform1のボタンと同じ働きさせるにはこれぐらいしか思いつかない
>>334
動けばいいと思って書いてますが、こうするべきだって話は聞きたい >>339
動くのは最低限だぞw
お前のレベルの話で済むのは一人で作るちっこいアプリだけだw >>346
ほんと無能だな
大規模だってまともに動かなきゃ意味ないだろ
そういう意味でも動けば良いんだよ なんで動かなきゃってのがどのアプリやシステムでも同じレベルだと勘違いしてるんやろ
それぞれにレベルっていうか難易度があってその上で動くレベルに決まってるのに
ほんと思考が無能 >>1
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです >>348
動くのは最低限の当たり前でその上で保守の話をしてるのにお前一人だけ動かないものの話をしてるなw やっと意味がわかったかもしれん
要するに疎結合とかが理解できなくてそこまで要求されると動くものが作れないから騒いでるのか
ふつう作れるよ?w ワッチョイ7c-はNGになってるわ
前にも暴れててそれで入れたんかな ルールってーと、フリーウェア作るときみんなライセンスとかどうしてるの?
いろいろ種類あって何採用していいのかよくわからない
ソース付きで、改変/配布/商用利用好きにしてって場合とかさ
MIT? >>360
実績が伴わないとしょっぱい空気になりそう
でもお前の給料20万じゃん・・・?
的なw easyかつsimpleがいいならpythonやっとけ 動けば良いじゃん精神の方が金は稼げるよ
だってIT技術者でも無い会社経営層は技術持ってても評価しないもん
技術持ってる持ってない関係なしに稼げるシステム作った奴を評価する
つうかこの板使っておいて元の2ちゃんねる作った億稼いだひろゆき自体が動けば良いじゃん精神だぞ
自身の配信でもそう言ってるじゃん
こういう技術どうこう言う技術者は無能ってさw そそ、使いもしない単体モジュールの境界テストとか負荷テストとか無駄
トータルできちんと動いてくれればそれで良い そんであるとき負荷が掛かったりちょっと改修したときに爆発する >>367
改修したらトータルできちんとテストしたら良いだけだろ 使いもしない単体モジュールがそもそもなぜあるの?
テストするまでもなく削除すればいいのに 結合テストすることを「トータルできちんとテスト」って呼ぶ層があるんだ
俺の知らん世界だな… >>370
普通にあるやろ
使うと思ってとか今後の拡張性の為にとかオーバーロード関数用意したけど使われてないとか
特に多いのが今後の拡張性云々とかカスタマイズ用とかってやつ
実際に拡張とかカスタマイズする時に使い物にならなくて設計からやり直す
つまり全くの無駄 >>373
結合テストは俺が勝手に言っただけや
でもリリース前ってそれだけじゃ無いじゃん
しかもそれって会社とかでも違うやん
だからどれとは言えないもんやで
俺の会社だと結合テスト以外だと外部にセキュリティテスト依頼したり社内の品管のテストとシステム監査が入る 使われないモジュールを書いてしまうおじさんや、非機能要件を無視する(あるいは認識できない)おじさんも淘汰される > セキュリティテスト依頼したり社内の品管のテストとシステム監査が入る
こんなテストや監査が想定されてる中、ユニットテストが無駄だって思ってるってこと? ちょっとまって!
> 外部にセキュリティテスト依頼したり社内の品管のテストとシステム監査が入る
こんなプロジェクトで「動けばいい」ってスタンスで仕事してんのか?
マジか >>377
俺が言った訳じゃ無いけどなw
まあ俺は単体テストはアリだと思うぞ
単体テストの結果でもって要は作業完了証明やろ
逆に言えば以降は俺の責任じゃ無いと言えるし仕様変更は別に金取れる >>378
そうだぞ
だって製品の検査で調べるのはその動くかどうかじゃん
中のコードがどうとか技術がどうとか関係無いやん すごいな。そのプロジェクト
俺の知ってる世界だと、そんなコード見せられたらレビュアーが怒り狂うわ >>381
多分お前が普段使ってる様なアプリもそんなもん
その神経質で無能なレビューアーが関係してるお前のシステムって世界でどんだけ売れてんのって話 動けばいいとしつこく言ってるやつはただの無職だよ
無職の妄想の中ではそうなんだろうさ
現実には動くのは当然で最低限でしかないんだけどね >>383
そうは言ってるけどじゃあそれ以上に何が必要か言えてないやん
ちなみに話の流れは
>>330
>>333
みたいなコードの内容から来てるんやで
こういうコードが糞だろうが動けば良いって話だから脱線するなよ
お前等っていつも前提間違ってるからなw まああんまり完璧なコードを書くと、その後の仕事がなくなるからな。 > 777c-KiN+
ついでに聞くけど、お前の中でシステム監査ってどんなもんなの? >>386
すまん無能の質問の意味が分からん
システム監査って経済産業省とかIPAに定義あるよね
普通はそれに準拠したものが一般的だと思うんだ
つまり共通認識じゃないの?
無能の頭の中って俺俺監査があるん? > だって製品の検査で調べるのはその動くかどうかじゃん
こんなこと言ってるし、また俺のシラン世界があるのかと >>388
アホw
まさか動くかどうかが機能要件や非機能要件 セキュリティ要件満たしてないと思ってる?
それこそ最低限満たした上で動く事だよね
その上で中のコードが>>384で言った様な糞コードかどうか関係無いよねって話だ
ほら言った様に話の流れが分かって無い
理解してない
前提を間違ってる
無能だな >>389
> まさか動くかどうかが機能要件や非機能要件 セキュリティ要件満たしてないと思ってる?
システム監査ってそういうことじゃないぞ
お前の中のシステム監査ってどんなもんなん? >>391
お前が間違ってるんじゃ?
経済産業省のシステム監査基準だとセキュリティガイドライン等に準拠してるか云々って書いてあるしそういう事を監査するもんじゃないの? 俺の知ってる世界だと、システム監査ってのは雑に言うとシステムを体制として担保する方法ができてるかを確認するもの
で、「機能要件や非機能要件 セキュリティ要件」に関連した箇所でいうと、それらの要件が正しく永続的に保証できる証跡が残せるか?って観点で監査される
つまり、
> だって製品の検査で調べるのはその動くかどうかじゃん
ってことにはならんのよ
だから、コーダーが「動けばいい」ってスタンスで仕事してたら、レビュアーが体制としてブチ切れるんだわ
で、お前の中のシステム監査ってどんなもんなん? 動けばいいってのは
なぜそう書かないほうが良いのか、ちゃんと理解して説明できないやつの言い訳
まあそう書くなって言ってる奴もちゃんと説明できてないんだがな >>390
GW終わって2ヵ月ちょい経つと今度は夏だねぇってなるんだよな ぼんやりとした質問ですが、
Form1にWebView2が合ったとして、Form2でお気に入りを作って、Form2からForm1の
WebView2にナビゲートしたいんです。
やってみたんですが、Form1にあるはずのWebViewがForm2から出てこないんです。
調べてみたらキャスト?とかいうのが必要らしくて、キャストはちんぷんかんぷんです。
コード書いておくので誰かお助けを~
後Form1のWebview2にアクセスしようとしたら保護がかかってしまいました。
ランタイムを噛ませたりとかよく分かりません。
こんな超初心者の俺ですが、助けてください。
private async Task InitializeAsync()
{
await webView21.EnsureCoreWebView2Async(null);
}
private async void Form1_Load(object sender, EventArgs e)
{
await InitializeAsync();
webView21.CoreWebView2.Navigate("https://web.biz-prog.net/");
} private void button1_Click_1(object sender, EventArgs e)
{
Form2 f2 = new Form2(this); // 自フォームへの参照を渡す
f2.Show(); // サブ・フォームを表示
}
ここからForm2
public partial class Form2 : Form
{
Form1 f1;
private object webView21;
public Form2(Form1 f)
{
f1 = f;
InitializeComponent();
}
試して見たんですが、オートコンプリートに((Form1)).webview2が出てきません Form1に配置してるWebView2がprivateで宣言されてるからじゃないかね
VS使ってるならデザイナーで選択してプロパティウィンドウのModifiersを確認して
PrivateになってるならInternalかPublicにしたらいいよ そもそも素人コーディングをやるやつがマトモなアプリ書けるとは思えん
アプリの作り方を勉強した人ならマシなコード書くからな >>399-401
解決しました。ありがとうございます。 >>394
あのさちゃんと読んだ?
お前は前提を勘違いしてるんだよ
動けば良いってそういう事じゃ無いんよ >>394
もっと分かりやすい例を出そう
例えば同じ処理を100箇所コピペ出実装したとする
普通なら関数化してってやるわな
こんな100箇所コピペした糞コードでもシステム監査や他のテストでは一切問題にならない
動けば良いんだよ もっというと例えばMV系フレームでこの処理はモデルに書くべきだとかどうとか
こういうのもどうでもいい
モデルで書くべきだろうが書くべきで無かろうが
動けば良いんだよ オブジェクト指向もそう
クラス設計がどうだの継承がどうだのどうでもいい
動けば良いんだよ このクラスでカプセル化されてないから云々
どうでも良い
動けば良いんだよ まあ中小規模だと“動けばいい”でやってるのも事実だからなぁ
エクセルにチェックつけてペタペタしてソースは見ないなんてのもザラ
なんならちょっとしたものなら本人が動いてる!で終わりとかね >>411
動けばいいよりちょっと良くなると
何が良くなるの?
資料も書かないくせに余計な拡張要素入れたがるやつってぶっ殺したくなるんだけど?
お前もその類? 可読性がよくなる
バグが入り辛くなる
後釜がコード読んで罵倒せずにすむ
自分がクソコードに遭遇する可能性が減る 資料を書く・書かないとコードを改善する・しないは別問題なのになんかキレ散らかしてるの怖・・・ 糞コード納品してリテイク食らって動けばいいといくら主張しても却下されてここで八つ当たりしてんじゃね 寿命の短いゲームの開発とかには動けばいいだろのメンタリティでコード書いてるやつが多い結構いる
実際クソコードだからバグ修正のアプデでまたバグるのも日常茶飯事 オマエらって普段からそんな立派なコード書いてるの?
皮肉でも何でもなく、大手さんの寄越したコードでもネットのサンプルをそのままコピペとか普通にあったんだけど。
アマゾンの AWS 用のサンプルコードとかでも整理なにそれなコードも普通にあるし。
ああいうレベルのものでも水準を満たしていたりするんだろうか。
まあ自分も普段は納品する側の中小だけど。 >>418
PSNの個人情報流出思い出した
dobon(だったはず)丸パクリの暗号化だった。"saltは8バイト以上"っていう文字列で復号化できた
オレが作った社内システムも同じことしてた。
社内システムだからセキュリティは気にしてないが。 >>420
クソコードをドキュメントに起こすときのモチベーション低下もあるな
規則性がないからな
あの頃の俺はなんでこんな変な処理を…… ?意味わからん
まさか今から書いて上げろって言ってる? 非同期ファイルコピーのサンプルを探していたら、FileStream を使う方法と File.Copy を使う方法があるようなのですが、どっちがいいのでしょうか?
それぞれのメリット・デメリットが知りたいです。
//方法 1 (FileStream)
private static async Task CopyFileAsync(string sourceFilePath, string destinationFilePath)
{
using (var sourceStream = new FileStream(sourceFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, true))
using (var destinationStream = new FileStream(destinationFilePath, FileMode.CreateNew, FileAccess.Write, FileShare.None, bufferSize: 4096, true))
{
await sourceStream.CopyToAsync(destinationStream);
}
}
//方法 2 (File.Copy)
private static async Task<bool> CopyFileAsync(string srcFileName, string destFileName)
{
await Task.Run(() => File.Copy(srcFileName, destFileName));
return true;
} とりあえず機能させたいならFileCopyで十分
中断とか進捗状況確認とか融通が利くのがFileStream File.Copyだと同期処理がスレッドを専有しそう。
FileStream.CopyToAsyncだとそうならないように実装されているのかな? >>426-427
ありがとうございます。
FileStream を使うことにしました。 >>425 の方法でファイルコピー後、コピー先ファイルのタイムスタンプを変更しようとしたら、例外が発生します。
頻度は10回に1回あるかないか程度です。
何が原因でしょうか?
static async Task Main(string[] args)
{
await CopyFileAsync("コピー元ファイル名.txt","コピー先ファイル名.txt");
}
static async Task CopyFileAsync(string srcFileName, string destFileName)
{
using (var srcStream = new FileStream(srcFileName, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, true))
using (var destStream = new FileStream(destFileName, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096, true))
{
await srcStream.CopyToAsync(destStream);
//試しにFlush・Close・Dispose 入れてみたけどダメでした。
srcStream.Flush();
destStream.Close();
srcStream.Close();
destStream.Dispose();
srcStream.Dispose();
}
var lastWriteTime = File.GetLastWriteTime(srcFileName);
File.SetLastWriteTime(destFileName, lastWriteTime); //ここで、: '別のプロセスで使用されているため、プロセスはファイル 'コピー先ファイル名.txt' にアクセスできません。' 方法 2 (File.Copy) の方法でも発生しました。
まったく原因の見当がつきません・・・ ef coreでDBからレコードを大量に取得する場合、
(A)
foreach( var row in await query.ToListAsync() )
で取得する場合と
(B)
foreach( var row in query )
で取得する場合、どちらがアプリサーバで消費するメモリが多いでしょうか?
queryはIQueryable<T>型です。
DBサーバとアプリサーバは分かれています
(A)だとDBサーバから結果が全部返るまで待ってからループ開始、
(B)ならストリーミングで読み出せたところからループ処理
って勝手に想像してたんですが、ef coreで使用するDBMSのミドルウェアに依存でしょうか
具体的にはDBMSはpostgresqlです。
このあたりのドキュメントあったらURL教えてください onedriveとかgoogledriveとかdefenderとかnortonとか とりあえず原因不明なので、最大10回を上限に、例外発生したらリトライするようにしました・・・
int j = 0;
bool b = false;
while (!b || j < 10)
{
try
{
//コピー処理
b = true;
}
catch
{
continue;
}
j++;
} >>432
Windows Defender 無効にしたら例外が発生しなくなりました!
天才さんありがとうございます!(>▽<) >>431
DB絡んでないけど一般論としては
https://atmarkit.itmedia.co.jp/ait/articles/1409/24/news105.html
もっともODBCドライバとかDBプロパイダの作りがザルだとクエリ実行結果を一気に全件取り出して
アプリサーバ上のメモリ上に保持してる可能性もゼロではないけど、postgresならそんなことはないだろう
実体化したくないけど非同期でレコードを取り出したいってことなら
await foreach( var row in query.AsAsyncEnumerable() ) >>435
ありがとうございます。
ToList()やToListAsync()はすべての結果が利用可能になるまで何も返されない、つまり
大量レコード処理には向かない
(B)の場合でもAsNoTracking()をつけて変更検知をOFFにしないと
Linq to DBがキャッシュしてしまいメモリ使用量が大きくなる
(B)でさらにI/Oをブロックしたくない場合、非同期ストリームを利用する
ということで大量レコードをチビチビ処理する場合は
async foreach( var row in query.AsNoTracking() )
という書き方に落ち着きました
他の参考URL
https://stackoverflow.com/questions/56176176/difference-between-tolistasync-and-asasyncenumerable-tolist
https://stackoverflow.com/questions/3688213/iterating-through-iqueryable-with-foreach-results-in-an-out-of-memory-exception ミス
最終的に
async foreach( var row in query.AsNoTracking().AsAsyncEnumerable() )
という書き方に落ち着きました Defenderやらが邪魔するのはそうなんだろうけど
C/C++でACLや属性変更でリトライなんてしてた覚えないからC#のDisposeでファイルがちゃんとクローズできてないだけな気もする Disposeでクローズなんかしないだろ?
つかそんな実装頼みの使い方してたら痛い目に遭うぞ >>439-441
>>429はWidows Defenderのせいにして終わってるから
納得できる形で解決してみせてよ 今回みたいなケースでファイルクローズ直後にファイルいじろうとすると使用中の様な警告出ることあるから
基本的にリトライするようなコード入れてるけどそんなことないのかね いちいちリトライなんか仕込んてたらハゲそう
イラネーヨって言ってくれ >>440
IDisposableを継承しているのにクローズしなかったら使い物にならないだろ。
例えばFileStreamクラスのDispose()には、
Stream によって使用されているすべてのリソースを解放します。
とあるので、当然Closeもする。 Disposeの処理の中でClose普通に呼んでたはず
ソース見りゃ分かるやろ >>450
>>440が「そんな実装頼みの」って言ったので、あえてソースを見ずにドキュメントの内容で答えた。 asyncawaitに対応してない何かがあるのかもな 自作じゃない.NET純正で、Taskを返す〇〇Asyncメソッドがasyncawait対応してないは無いでしょ だから、OSだって非同期にファイル処理してるんだろ?
で、完了通知なんて受けて無いw C#のファイル操作が遅いからファイルコピーと属性変更との間にWindowsDefebderが割り込んでスキャンされて妨害されるのかもしれない
知らんけど >>455
win32apiを使ってるのでさすがにそれなはい
削除してもすぐにファイルが消えないのはあるあるだからリトライするのが定番 とはいえ
頻度は10回に1回あるかないか程度
Windows Defender 無効にしたら例外が発生しなく
なら妥当かもしれない >>429
これ閉じる前にFileStream.SafeHandle使ってSetLastWriteTime(SafeFileHandle, DateTime)のオーバーロード使うのはどうなの? 質問なんですが
formのbutton1.textをテキストボックスから取得したいのですが、
テキストが長い場合、ボタンのテキストが改行されてしまいます
表示が後半隠れてしまうのは別に構わないのですが、
改行がおこるとテキストがボタンの上側に移動してしまいます
button1.textを改行しないようにできないでしょうか? button1.AutoEllipsis = true; どなたか教えてくださいC#です
public class Person
{
public Name Name { get; set; }
}
public class Name
{
public string NameText { get; set; }
}
こういうクラスがあったとして、
var p = new Person
{
Name = {},
};
Console.WriteLine(p.Name);
これはnullが出力されるんですが、構文解析時のName={}の右辺はどういう評価をされてるんでしょうか?
また
var p = new Person
{
Name = {NameText=""},
};
これもコンパイルは通りますが実行時にObject reference not set to an instance of an object.で落ちます
Name = {NameText=""},
の{NameText=""}は構文解析時にどういうモノとして扱われてるんでしょうか?
本来はName= new Name{NamText=...}とするところで、new {クラス名}を書き忘れたらビルドが通っていたのでなんだろうと思った所存です オブジェクト初期化子
1つ目のケースは初期化するプロパティがないので何もしない
2つ目のケースはこれと同じ意味になる
var p = new Person();
p.Name.NameText = "";
https://ufcpp.net/blog/2016/12/tipsobjectinitializer/ >>460
レスありがとう、Paintイベント追加で自力でやるのはけっこう大変そうですね
>>461
ありがとう、...省略はできたけど、文字は上側に寄ったままでした
button1.Padding.Topに4ぐらいいれたら解決しました >>463
なるほど!ありがとうございます!
いやーこれはコンパイル時に落としてほしい… Formsで独自描画はバッドノウハウに近いと思う
スケーリング考慮してないのばっかり >>465
AのコンストラクタでNameがnewされてたら問題ないわけだし使い分けでしかないね
nullableを有効化しとけばこのケースだとAのNameがnull許容でもnull非許容でも警告出してくれるよ C#でASP.NETでHTMLコード書くにはどこいじればいいの? 私にとっての解決後も議論があったようですが、
Windows Defender を無効化 ( Windows Defender の [除外] に、コピー先フォルダを登録する ) してから、1回も発生していません。
for(int i = 0; i < 100; i++){}
での 100回ループテストを何度か行っても発生していないので、自分の中では解決済みになっています。 ファイル内容変更したからウイルスチェックが走ってんじゃん
ってオチかよw オチかよも何も、最初からそういう話だったのに
DisposeがちゃんとやってないんだろとかOSの遅延がうんたらとか頭でっかちが騒いでるだけやで asyncawaitってスレッドセーフのメソッドじゃなくても使っていんだっけ? >>473
全く結論になって無いよあれ
単なる対症療法なだけだろw その対症療法が唯一の治療法なんだがまだそれもわからないのかよw リソースを占有できるのがそのスレッドだけではない場合
つまり今回と同様の場合だな
原因がセキュリティソフトかバックアップソフトか何かは全く関係ない
時間を置いて何度かリトライしてそれでもだめなら例外を投げる
基本中の基本だぞ? >>1
> 議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 >>475,476
今回の場合(>>429)は、ファイルを一旦解放するのが問題なんだから、>>458の方法で上手く行くでしょ ファイル削除のことならリトライは必要だけど、今回のと関係ないね てか、ファイル操作するのに、排他しなきゃだよな?
一度手放したら他のプロセスに横取りされちゃうだろ もう一度再現させた上でロックしているプロセスが本当にWindows Defenderだったのか確認しない限り不毛な議論では? っていうかどうしたいんだろ
コピー後のファイルを
誰かがつかんだままにすれば
似たようなエラーはいつでも
起こせるし起きちゃうじゃん
それがこのアプリにとってレアケースでないなら他アプリがつかんだママのときの動作を仕様で定義するべきだと思う >>484
>>429のソースを見るに、ファイルの最終書き込み時刻を保ったままコピーしたいんでしょうよ
コピー先のファイル作成とタイムスタンプ操作を1回の排他モードオープン〜クローズの間にまとめてやれば
他のプロセスに割り込まれようが無いし、その後につかまれてもやること終わってるから問題無い >>481
今回のセキュリティーソフトわ切るやり方こそ対症療法だろw >>458
これ知らなかったんだけど、実際に存在する?
コード書いてもでてこないんだけど
ちなみにGetLastWriteTime はあるようだ >>487
.NET7で追加された
.NET6以前はP/InvokeでWin32API使えば同等のことは出来るけど時刻の扱いが面倒臭いね そもそもファイルのタイムスタンプを合わせる仕様が本当に必要なのか小一時間 >>488
thx
>>489
他人の仕様にケチ付けちゃだめ タイムスタンプなんて危ういものを何に使おうってんだ?
生成時刻が重要ならファイル名に組み合わせしまうとか
他の方法の方がよっぽど確実だぞ DateTime.ToFileTimeみたいな関数あったはずだからWin32利用したら案外簡単 コードも提供せずにこういうことやりたいと言ってるわけでもないし、
今回問題となっている部分についてだけで話すればいいんじゃないの
質問者が他のやり方ないですかみたいな質問ならまだしも
回答者が勝手に仕様かえて変な回答しないほうがいいと思うなぁ 俺は基本更新時刻の新しい順で並べるからファイルやフォルダのコピーごときでファイルスタンプは変わって欲しくないな コピー元のタイムスタンプを維持したいユースケースなんていくらでもあると思うんだけどな
cp -pのように最初からそういうオプションが用意されてないのが不思議なくらい >>491
お前の考えなど知らん
コピー先のファイル名はそのままである必要があるんだよ あれ、File.Copy()でコピーすればファイルの更新時刻とかはコピー元ファイルのままだと思ってたんだけど、違うの?
わざわざLastWriteTimeを転記する処理なんか不要じゃないかな 結局なんで死んでんだっけ?
スレッドセーフじゃないメソッド呼んでたから? FileStreamを開放したところでDefenderに掴まれてるから >>470
ノートン先生が毎回俺がコンパイルしたexe没収しやがるのな gdriveの横槍でvsのビルド失敗しやがるからな >>496
だからファイル作成時刻が重要ならタイムスタンプに頼る様な仕様は事故のもとだから仕様から考え直さないと後で泣くのはおまえさんとこだって話だw ファイルの作成時刻が大事で、ファイル名も変えたくないなら
実データの内に時刻もっておいて逐次参照するしかないか タイムスタンプをバージョン番号にするのが一時流行ったな >>497
コード提供部分にはない仕様でコピー中の進捗管理もしたいからブロックコピーみたいな事したいんじゃないのと思ってるけどね ファイルコピーツールでタイムスタンプ類もそのままって普通のことでは? そうだよ
その当然のことがC#だとなぜか上手くいかないねってマヌケな話を続けてるのよ 違うよ、Defenderに割り込まれて失敗してただけなのに、C#が悪いとか実装だよりがうんたらとか明後日の話してるだけ
あとなぜかタイムスタンプ同期を敵視するおかしな輩 タイムスタンプって言えば、マイナンバーの他人データ事件 asp.net 7.0/razorでTest.razorファイルを作って中身を
@page "/test/{text}"
<h1>Hello, world!</h1>
とすると、http://localhost/test/aaaaaaaは期待通りTest.razorにアクセスするんだけど
http://localhost/test/ にアクセスしようとするとエラーページ(app.razorの<NotFound>)に飛んでしまいます
エラーページに飛ばずにTest.razorに導くにはどうしたらいいのでし 自決。重複指定できるんだね
@page "/test/{text}"
@page "/test/" ループしつつ例外来たらリトライぐらいしかないんだな
ファイルアクセスって 絶対に他のプロセスがアクセスすることが無いファイルでもなきゃそうだろうね 一度握ったら離さない様にすれば良いだけ
まあ、握るまで待つ事はあるだろうけどさ タイムリーな話題
Microsoft Defender がファイルコピー速度を大幅に低下させるというテスト結果
https://security.srad.jp/story/23/05/11/212256/ 当たり前の話じゃないの?
アンチウイルスって実行ファイルの中身チェックするのが仕事なんだし >>517
コピーされるファイルも実行ファイルの中皆の? 別にチェックするのは実行ファイルだけじゃ無い
基本的には全部
拡張子変えて実際は実行ファイルって場合も有る
特殊な方法で画像や音声ファイルに別ファイルを入れる事も出来る
普通に開いても画像や音が流れるけどやけにファイルサイズ大きい >>428
非同期I/Oについて以前別件で調べていたページをブラウザで開いたまま放置してて、
そこを読んだら、
・FileStreamは~Async()メソッドを呼ぶだけだと、同期メソッドをTask.Runしているイメージと同じ
・非同期IOにするには、FileStreamのコンストラクターでuseAsyncをtrueにする
とあった。 そもそもIOって物理的に非同期にできんのかな?
って疑問はある
ファイル名(パス)を変更するとして
それが既存と被らないことをチェックするためには
HDD全部が排他対象になっちゃうと思うんだけど・・・?
世の中には頭のいい人がいるからな
Windowsもうまいことなってるのかもしれん FileStreamの~Async()メソッドの話をしているのに
ファイル名を変更する話をし始める人 >>526
あ、そっか
やっぱりそこは
どうにもならねえんだよな まずIOいじるときは
プロセスセーフである必要があって
それをサポートするAPIはないと
次にスレッドセーフである必要も
あってそこはAPIがあるのと
プロセスセーフの仕組みに載せてしまってもよい
みたいな? 別に考えるのは悪いことじゃないけどここで書くような事か?
チラシにでもかけよ >>523
出来るも何もむしろ必須レベル
正常なディスクであればファイルIOは即終わるが壊れかけとかだとめちゃくちゃ時間かかる事もある
要するに完了時間は不定だから多数に公開しようとしたらファイルIOはWin32のオーバーラップを利用した非同期化は必須
C#であれば手軽に使えるasync版もあったはずだが >>530
なんかごちゃごちゃうっせーけど
OSとAPIに任せて勝手にやってくれるわけではないよね? やってくれてなかったらOSもプロセスもディスクアクセスのたびに死んでるわ >>532
だから死んでるじゃん
エラー出して
ハンドリングはしてないよね? スレ伸びてるなと思ったら荒れてたのか
スルーしたほうがいいのかな?答えたほうがいいのかな? デバイスとファイルシステムの区別が付いてないし基本的な知識が欠けてる
相手にするだけ無駄かと
スレチだし まあふらっとだしC#にかかわる範囲で答えてやれば良いとは思うが
そもそも>>523は非同期IOってどんなもんだと思ってるんだ >>535
プロセスセーフにはならないってことだよね streamreaderwriterで死ぬってことはOSの機能じゃなくて
あくまでアプリ側がそう組んだからそう動くってことでおk? >>531
勝手にやってくれない?
お前はDeviceIOControlでも利用して一々マニュアルでハードウェア制御してるのかよ
普通に全部勝手にやってくれるよ ReactiveExtensionsって現場では結構使われてるんですかね? >>530
Win32APIで最近非同期のコードを書いているけど、
ReadFile()/WriteFile()が途中までで返ってくることも踏まえてループ処理にするとして、
1) ReadFile()/WriteFile()で同期(OVERLAPPED構造体なし)
→同期
2) ReadFile()/WriteFile()で非同期(OVERLAPPED構造体あり)、WaitFor~、GetOverlappedResult()
→スレッドを明示的に手放す?
3) 1)をCreateThreadpoolWork()
→スレッドプールのスレッド内で同期処理
4) 2)をCreateThreadpoolWork()
→スレッドプールのスレッドで動作するが、途中でスレッドを明示的に手放す?
IOCPならその間に他のスレッドが動きそうだが、スレッドプールAPIでもそうなるか知らない。
5) CreateThreadpoolIo()、ReadFile()/WriteFile()で非同期(OVERLAPPED構造体あり)、
IoCompletionCallbackで続きのReadFile()/WriteFile()を行う
→これが一番効率的だと思う。
最近5)で書いてる。めんどくさい。うまく動かなかった時に調査のために同期処理にしてみることができない。
C#のasync/awaitは神。
.NET Framework/.NETのライブラリがどこまでやっているのかまだソースをほとんど調べていない。 >>542
ReadFileEx()/WriteFileEx()に対して何かアドバンテージあるの? >>543
ReadFileEx()/WriteFileEx()のlpCompletionRoutineを使ったことはないけど、
LPOVERLAPPED_COMPLETION_ROUTINEのページに、
システムが完了ルーチンを呼び出すたびに、アプリケーションのスタックの一部が使用されます。 完了ルーチンが追加の非同期 I/O とアラート可能な待機を行うと、スタックが大きくなる可能性があります。
とあるから、完了ルーチンでさらに非同期I/Oを繰り返すと、スタックがあふれる恐れがあるんじゃないかなあ? >>544
なるほど
.NETのFileStreamもReadFile()やWriteFile()を使ってるのはそれが理由かも >>545
いや完了ルーチン内で更に完了ルーチン呼び出しするなんて実装メリット無さ過ぎて普通しないからそれが理由ではない
単純に最も効率的な非同期IOはスレッドプールを利用した完了ポートだからだよ
C#のasync awaitも完了ポートベース、nodejsもWindows版では完了ポートベース >>546
どうした?
実はこれまで組んだファイル周りの実装がまずいことに気が付いたのか?
プロセスセーフまで保証しろって言われたら正直俺もやってねえ
っていうかもっかいやってくれればええやんってポリシー
だったけどこのスレ見たやつが指摘してきた(笑)
面倒くせえw プロセスセーフってなんだ?
一つのファイルを複数プロセスで扱う場合においても別に難しい事はないけどな
排他モード指定したら良いだけなんだから >>549
一度に完了しないでチマチマ複数回アクセスする類いだろ >>549
いや、他のやつにアクセスされてると死ぬねん
その時いつまで待てばええのか仕様がないねん
タイムアウト付けるとじゃあその時できんかった処理をいつやるのか仕様を考えろって言われて辛いねん
さらにそれが終わる前に他の処理が進んでしまってもまずいときあんねん
こんなレアケース相手にしとうなかったねん >>551
それファイルIOの問題ではないな
非同期プログラミング全般の問題 まあ、昨今のマイナンバー絡みの誤配信あるし
つまらないレアケースを突いて来る奴増えたよな いい手を考えた
それってこの間作ったやつも
同じですよね?
解決しているのであれば
対策方法を教えてほしいです
って比較的暇そうな
プロジェクトも誘爆させてみる 元々はファイルクローズ直後に約10%程度日付の書き換えに失敗するという質問で
原因はDefenderと結論付けて解決している
対策はリトライ、検索除外、ファイルを閉じる前に日付を書き換えるなどが上がっている
なお非同期書き込みは関係ない >>551
レアケースでもなんでもなくて、当然設計段階で考慮しとくべき話
コーディング以前の問題
>>553
レアケースでも、それが発生する可能性がある以上、発生したらどうするか考えとかないとダメ
エラーで落とすとかどうもしないとかも含めてな
つかマイナンバーのやつは、レアケースというほどレアな条件が重なってるとは思えん
たんなる設計不良とテスト不足だろ >>555
Defenderが変化のあったファイルを即握るから一度手放したら持って行かれるってのが原因だよ?
この場合Defenderは一例に過ぎない、他に同じ様なプロセスが走ってたら同じ事 >>557
そう書いてるけど何か?
非同期書き込み関係ある? >つまらないレアケースを突いて来る奴増えたよな
つまるつまらない関係なく安全なシステム構築が原則じゃねーの
こんなこと言う奴が実装してると思うと怖いな >>558
だから原因はDefenderじゃ無いだろw
対策でDefender切るなw 主張がおかしい
少なくとも例外=死ではないわな
いくら他言語知っててwin32api知ってても例外回りというかそこら辺の理解が出来ずに対応が出来ないから初心者なんだろう
ご愁傷様 でもこれって排他で掴んじゃうテキストエディタでファイル開いたまま放置されたとかなったら回避不能だよね
新しいファイルを作っちゃうって手も残ってるけど
正しいソフトウェアのあるべき姿って言われても困るわけだが?
まあ、新しいファイルを作っちゃっていいなら作っちゃうが・・・?
読んでくるとき常に最新読むってすれば簡単だし 普通はメッセージを出すだろ?アプリ作ったことがないのか? >>563
まあ、ログにも通知にも残すけど
定期処理とかだと
夜中中出しっぱだったので一切他の処理やらんかったぜもない話で 責務以外のことまで考慮する必要はない
書き込みしようとしたらHDDが容量不足だったは普通はそこまで考慮したソフトは書かない
一般的なリトライの範囲かせいぜいメッセージ出して人間が対応する
録画ソフトなどで事前に想定された範囲内で必要となるなら用意する
一般的なライブラリの範疇の話じゃない難癖レベル 排他で掴んじゃうエディタで開いたままにする関係者が悪いのであってやるなというだけの話
人が排他で開いたままにしちゃうかも、まで考慮することじゃない オートリトライでFDDを延々とカッコンカッコン鳴らしてやるぜ >>567
FDDだとファイル一杯になった処理は必ず必要だよな
あんな容量の小さなメディアだしな >>562
当初の質問の流れだと①ファイル出力②タイムスタンプ変更を連続してるわけだから言ってる話(①のファイルをエディタなどの人為的操作でつかまれる)はおかしくない?
少なくともやりたかったことがどこかにあるファイルを別の場所にコピーする、ファイルのタイムスタンプは同じにするなら
①いったん別名でファイル出力
②タイムスタンプ変更 ※リトライ含む
③正しいファイル名に変更 ※リトライ含む
ぐらいがいいんじゃないかと思うけどね③まで正常終了したらOK >>569
連続してる様に見えるけど、CPUから見たら隙間だらけだからなぁw FDDってプレーンテキストくらいしか保存できないよね? 2HDのFDにDOSと一太郎とATOKは入ったぞ
ちなみに媒体をFD、ドライブ装置をFDDというのだぞ 知識としてしか知らないと>>571みたいな認識になってしまうのか Aドライブでアプリケーションソフト起動してBドライブはFEPの辞書ファイル入れて使うのが一般的だった気がする ハードディスクがCドライブから始まってるのはその名残りだよな 1KB程度のデータしかない住民票を印刷するのにバカでかいPDFなんぞをワザワザこしらえてご丁寧に暗号化復号化レンダリングイメージ化などいらんことしてるから日本はダメなんだよ >>576
そりゃコンビニのコピー機で発行できるようにそうしてるんだろ
もしかして、コピー機の方を改修したほうが良いと思ってるのかい?
どんだけ費用かけるつもりだよ 画像PDFは改変対策だろ?
まあ、テキストPDFでもプロテクト掛けられるけどな >>571
今だとその程度の使いみちしかないかもな
FDDしか無かった頃はあらゆるデータが貧弱だったが 名前などの文字部分は当然テキストよ
だけど印刷内容は文字だけじゃないだろ
役所で公的文書取ったことないんか? >>580
枠線とか印刷とか要らんから電子署名したデータだけ寄越せと言ってるんだと思うぞ
そんなことしたら年寄りは生きていけなくなるがな 全部テキストにして
電子署名はQRコードで出せば良いのでは? >>581
で、それでどうやって今の社会システムに対して公文書行使するんだ? QRコードはandroidTVとかのアカウント認証で使われてるね
読み取るとurlにデコードされてwebブラウザで認証するやつ
スマホやPCがある事前提 >>583
できないからダメだって話だろw
効率的に電子決済するにはしがらみが多すぎるんだよ >>576
記入可能なPDFを端末で持っておいて
テキストだけサーバーから送れば爆速で処理終わるよね PDFを悪用する人がいても書類を受け取った人が偽造かどうかオンラインとかで確認できるようならそれでもよかったのかもね
コンビニ出力と役所出力の公文書で受け取った側の運用が変わるデメリットを受け入れられたらの話だけど >>588
リッチクライアントならそうだね。
シンクライアントなら全てサーバーで処理することになる。 >リッチクライアントならそうだね。
もしかして:ファットクライアント >>588
PDFってそんなでかいっけ?
テキストと分離した程度で爆速なんてでないだろ よく聞かれることかもしれませんが、教えてください。
私はいま、VisualC#の本を見ながら勉強しています。自分で作ったソフトのウィンドウが表示されて
ボタンをクリックしたら「こんにちは」とメッセージが出てるのを見て喜んでるレベルです。
夢は仕事で使うシステム(Windowsソフト)を作ってパートさんたちの仕事を楽にすることです。
今やっている本を買う前に買ってしまった「C#入門」的な本がいくつかあるんですが、それを
見ると、私が勉強しいるのとはまったく別の技術のように見えます。
VisualがつかないC#って、本当に文字で記述するための文法や構文の解説ばかりのようで、
ウィンドウやコマンドボタンの作り方ひとつ解説してないみたいです。
お聞きしたいのですが、VisualのつかないC#を習得した人って、どんなものを作るようになるのでしょうか?
また、ただのC#を学んだ人って、私のようなVisualC#だけを学んでいる人のことが幼稚な低レベルに
見えてるんじゃないかという気がするのですが、それでも小さい企業にあるWindowsパソコンで使う業務システム
を作るにはVisualの方がずっと楽で有利だと思うんです。
いかがでしょうか? VisualのつかないC#とはいったい...
c++とC#なら別物だぞ よく分からん感情がにじみ出ていて真の質問が分かりづらいのでもう一回まとめ直してください VisualC#の本を読んで勉強してるけど、Windowsアプリの作り方を勉強してるつもり。
C#の入門書も見たことあるけど、プログラム文の書き方のようなことで終始していて、
ウィンドウの作り方やボタンの設置のしかたすら解説されていないみたい。ぜんぜん違う。
Visualが付かない方の本でC#を勉強した人って、何が作れるようになるの?
Visualが付く方のC#だとwindowsアプリが作れて使い道が多そうなんだけど。
↑
これが質問の主旨です。 VC++というかMSVCっていうとMicrosoftによる実装って意味合いもあるが
Visual C#というと殆ど開発環境を指してしか言わないと思うんだけど
別にフォームデザイナーがなくとも自動でコード生成してるだけだから
コードだけ書いてもGUIアプリは作れるし、他のIDEでも良い
かたや開発環境を前提としたアプリの作り方
かたや言語仕様の解説みたいな感じじゃないのか まずVisual C#というのがVisual Studioのものすごく古いバージョンなんだわ 意味が分からない人が多くて困るな
C#は言語そのものでVisualと言ってるのはGUI付きと言うことを言ってるんだろ
>>595
別のようだけどそれは基本的には同じものです
入門の仕方は様々ある
ざっくりとたとえると英語で言えば文法の本と日常会話の本に当たります
文法の方にはhelloは書いてなくて日常会話の方には未来完了とか書いてないでしょ?
表示技術はあなたの言うvisualで学べるけど文法の方やライブラリなどの使い方は学べない
文法を学ぶのにいちいちウィンドウを出していたら手間がかかる
アプリの作り方をある程度学んだら言語自体+ライブラリの使い方だけ学んでも問題はないのです >>598
windwos上で使ってる一般の人は両方とも勉強します
基本的にはwindows上でしかGUIは提供されていないけどライブラリやwebサービスはGUIがなくても書けるし需要はある
GUIで出来ることは表層だけで中の処理は言語仕様やライブラリを知らないといけない
本格的にGUIを勉強しようと思っても今はそれ向けの本がほぼないので自習になる 書籍だと割と最近出たのでもタイトルにVisual C#って付いてるのがいくつかあるね >>602
絶望的に頭がわるいでしゅーと言う主張は情けなくてみっともねえwwwwwwwwwwwww 基本的に何かで一通りアプリの作り方を学んだら
C#の言語仕様についてしっかりその文字だけの本を読んで勉強することになる アプリっつっても、デスクトップアプリ、コンソールアプリ、Webアプリなどあるからな
他にも、サービスとか、WebAPIとか、ライブラリとか
何を作るかで、使うライブラリやフレームワークが変わってくるし >>605
こんな感じの頭いかれてるやつだってことを素人にもわかりやすく伝える親切さまであったか >>608
>「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 そういう問題じゃねえよw
頭いかれてるやつが優しく教えるスレってどんな地獄だw ID:muRHf0j+0が一番頭いかれてる
揚げ足取りか初心者相手にくだらないレスして悦に入ってるクソ人間 >>598
GUI(ウィンドウやボタン等がある)アプリを作るには、C#の文法と、GUI(ウィンドウ等)の作り方の両方を覚える必要がある
どっちを先に覚えるかの違いでしかないよ
(GUI無しのアプリは使い道が限られるけど、文法を学習するのに向いてる) 今出てる本だけではGUIについてしっかりと学べる本はほぼないと思う
大体がWindowsフォームについてでWPFやUWPについて学べる本は少ない >>605
これを自分で見直して頭いかれてると思えないメンタルよw >>601>>603
ご回答ありがとうございました!
外国語の学習の比喩でなんとなく理解できた気がします。
理屈から入る人ととにかく外人と話したがる人がいるけど、けっきょくマスターするには
どっちの学習も必要になるという感じなんですね。
私の質問に回答してくださったせいで、あなたを小馬鹿する人が現われてしまったようで
本当に申し訳ないです。
ありがとうごさいました。 >>614
一個でもまともな回答レスが書けるか?
自分のレス見返してみw >>612
GUIなしのアプリって、素人にもイメージしやすいものですとどんなのがありますか?
GUIアプリの中で一部の機能を担う部品(ライブラリっていうの?)みたいなイメージでしょうか? >>616
お前のまともなレスどれ?w
例の小馬鹿にされたやつ?w ウィンドウだしマウス使えるじゃんって突っ込みなしならコマンドプロンプトとか? >>617
GUI無しのアプリは素人が使うことはほぼ無いから、分かりやすい例を挙げるのは難しいな…。
小さなツール類が多いけど、そう言われてもピンとこないよね。
> GUIアプリの中で一部の機能を担う部品(ライブラリっていうの?)みたいなイメージ
GUI無しのアプリは単体でも使えるけど、GUIアプリから呼び出して使うこともあるよ。
ライブラリはそれだけでは動作しないのでアプリとはちょっと違う。 >>620
果たして、コマンドプロンプトは通じるのだろうか 例えば、ウェブ開発のバックエンドは、Ruby on Rails。
OS(Linux, サーバー)とのやり取り。
ファイル操作、テキスト処理、データベース処理などで表示部分なし
一方、フロントは表示部分で、HTML, CSS, JavaScript
Railsの給料が高いのは、1人でバック/フロントの両方を作るから。
これをフルスタックエンジニアと言う
これを複数人で分けて作る場合は、
意思疎通・打ち合わせコストが掛かるので面倒 >>620
>>622
PowerShellでもおk? powershellはC#コードも埋め込みできて、ある意味最高の環境と言えるけど
どちらにも習熟してる必要がある
C#学習には遠回り powershellはダブルクリックで動かないから使いにくい >>628
動くようにできるぞ
ダブルクリックで動くようにしたらお前らがまたトロイにひっかかって大騒ぎするからデフォではできなくしてるだけだ 今コピーツールを作ってるんだが、Powershellと連動させたら需要あるかね?
みんなPowershellで何をやってるんだ? javaには戻れないからC#の案件が増えてくれるのを期待するのみ。
エラーがどこに出てるかさっぱりわからんかったJavaは。
今でも動かないコードあるし、何が何だかさっぱり分からない。
その点C#はMicrosoft様が一括でやってくれるので俺でもできた。
javaやるくらいならKotlinやるよ。
面倒くさすぎ >>629
人に渡すときの事考えるとやっぱりちょっと
ダブルクリックしたら警告する程度でよかたのに >>634
restrictedを指定したバッチファイルと一緒に配布すればいいよ。 Javaの検査例外とはいったい何だったのか
もうちょっとあれが正常進化しなかったのかなぁ >>637
リスコフの置換原則を強制するためのものだけど土方にはそんな強制不要だし検査例外だけじゃ強制できないから中途半端で使いにくくなるだけなんだよね >>636
ちょっとなんだかなあって感じするけど、それがベストか
>>638
テキストエディタとかで簡単に修正できたほうがいいかなって >>617
自動化とかのコンテキストで、GUI無しの業務App増えてきたよ >>642
コンテキスト=文脈ってことで指摘を受けること無いと思うんだけど、なにか癇に障った? >>642
問題なく伝わる使い方だよ(「文脈」を指す表現) ウェブ開発のコンテキストでAPIはウェブAPIを指す
Windowsネイティブアプリ開発のコンテキストでAPIはWin32APIを指す
↑こういう使い方は「コンテキスト」の使い方として正しい
>>641のコンテキストは俺も見たことない使い方だから説明要るんじゃね >>643-644
コンテキスト言いたいだけやろ
要らんやん 状況や流れで変わる何かが合って
その時の状況や流れが コンテキスト にあたる
全く同じことをしていても解釈が違うのはコンテキスト依存だから どんどんアホみたいな方向に話が展開していく
This is the bikeshedding 正直なところ今回の用法ではあまりマッチしてるようには感じない
とりあえずそれが何かとの勘違いだとして何と勘違いしたのかを考えてみよう なんだよ自動化のコンテキストって
夜間バッチかな、メッセージングかな、FAかな
どうせコンテキスト使うならコンテキスト境界を明確にしろっつうの セグメントあたりかな?
カテゴリー、ジャンルやフィールドとかそういうのの狭い分野とかそういう事を言いたいんじゃないかと >>651
イマドキ自動化って言われたらRPAやろ
まあ無能には分からんか コンテキストの使い方としては問題ないだろうけど、その言葉を選ぶことが場にそぐわないというか
匿名掲示板の会話の中で使うと浮く言葉だという感覚は多少あるかな >>653
元レスからの文脈を辿ればRPAは出てこねんだわ void Say(string text){
Console.WriteLine(text);
]
と
void Display(string text){
Console.WriteLine(text);
]
みたいのがあって中身が同じだけど別になってるのはコンテキストが違うから
コンテキスト無視してvoid Print()なんかにまとめちゃってからやっぱセリフは水色表示しましょうとなると修正が大変
と無理やりプログラムに絡める >>659
今時って言ってるやん
馬鹿って理解できないのかねw >>660
こういう馬鹿が夜間で終わらないバッチ処理を作って訴訟になる 処理内容が同一でもコンテキストが同一とは限らない
処理内容が同一でもコンテキストが異なれば処理内容は同一であり続けるとは限らない
処理内容が同一でもコンテキストとして違いがあるのであればメソッドは別々にするのが望ましい >>661
じゃあRPAと絡めたGUIなしアプリの具体例を出してみろよ >>651
それらが元々GUIを備えていると本気で思っているのか?w 「文脈」は死語なんじゃね
前後の文読まないやつが大増殖してもう慣れたわ マの板でアメリカがデフォルトの危機言われて
頭ん中??????????????ってなる人たち? ちょっと聞きたいんだがさらに一歩難いアルゴリズムについてね
本屋に基礎的なアルゴリズムを開設してる本はいっぱいあるし理解できるけど
海外の学者が書いた超分厚い専門書的なもんはマジでわからん
最適化とか巡回セールスマンとか群論とかトポロジーとかそのレベルも理解必要なんですかね?
C#できます!基本的なアルゴリズム理解できます!だけはちょい恥ずい
皆さんC#の言語仕様詳しいけど俺はさらに上を行ってるって自信を持てるには言語使用だけで
十分なんですかね?やっぱアルゴリズムも欲しがるべき? そのへんの業務アプリ開発のコーダーくらいなら要らないんじゃね >>673
それは本当に専門書なのか?
割と基礎の部類に入るからQiitaでもいくつも記事あると思うぞ
土方には必要のない知識だけど使えるようになっておけば収入が高い職場に行けるかもしれんからやっておいて損はない 実際にコードが書けなくても必要な時にそのパターンに当てはまると知っているだけ良い
たまに概念などを興味本位で知る程度で十分
キーワードを知ってるだけで強い
自分が大学で最初に習ったアルゴリズムはソート
複数のソートの手法を学ぶ
それで計算量などの基礎的概念を刻み込む
それが出来るなら最適化についての段階は踏める
じゃあ数式を見てコードに落とせるかと言えば無理だと思う
そこから本気出すかライブラリ探すかになる 一般的なソートや検索のアルゴリズムは本屋にある基礎的なアルゴリズム解説本でカバーされてるやろ
今広く一般的に使われてるソート関数で使われてる細かい最適化の中身まではカバーされてないけど ていうか自信の持ち方がいびつな気がするな
作ったアプリで自信持てば?
C#ならUnityでストア販売できるだろ
売上見てニヤつけよ 知りたいときに知りたいことを学べばいい
ライブラリで済むなら勉強することもないかもしれない
大学でオペレーションズリサーチの講義を取った
そこでは問題の概念について軽く学んで後はずっと確率などの微積分を行う
コードなどは一切書かないし手順すら学ばない
試験も同じで計算や数式を証明したりする
一般的なコーディングにはほぼ意味がないけど何かの問題解決するためには必要な人には必要
大体の人には無縁
難しい本だけど大学の教科書の内容ですら半年かけて講師に教わって学ぶ内容なので本を開いてぱっと理解できなくても何も問題ない
そういうものだと 1950~1970ごろにそういったサイエンスが花開いて多数の天才たちが研究し確立した手法を
今後追いで勉強してる
急ぐことはない 業務アプリではまず使わん
ソートも探索もコレクションクラスのメソッドを使うだけ
黎明期ならまだしも今はPCの性能が上がって最適化の性能差もほとんど問題にならない
リアルタイムゲームとか機械学習系では使うだろうけど >>683
トポロジカルソートはタスクの優先順位を決めるのに使うだろ
ライブラリにあるか? 群論というのは0個以上の要素を扱う時に使う
JSのfilterやmapやreduceはそのカテゴリに入る
何でもかんでもforでやってたら複雑になりすぎるし逆に何でもかんでもreduce使っても複雑になりすぎる
こういう時に汎用的に使える関数を作れたら生産性上がるぞ 初歩的な質問ですみません。
アドバイスを頂きたいです。
ある通信機器から10分間隔で指定のデータを取得し、そのデータをファイルに記述するプログラ厶をサービスアプリで作成しました。
追加の要件としてユーザーからの操作でデータ収集を停止/再開させる機能が必要になりました。
操作用のボタンが必要になるのですが、サービスアプリではGUIを持てないと認識しているのでフォームアプリで作成し直す必要があると考えています。
停止が押されていない間はデータ収集を継続したいのですが、フォームアプリだとユーザーが画面を落とす(×ボタン押下)可能性が考えられます。
画面を落とした時、つまりフォームが立ち上がっていないときでも収集処理をすることは可能でしょうか?
調べるとBackgroundWorkerなどは出てくるのですが、これは少し意味合いが違っているように感じており、似たような例を見つけられませんでした…。 本体はサービスで作ってUI専用のフォームアプリから名前付きパイプでシグナル送ればいんじゃね >>689のようなプロセス間通信制御でもいいし
どうしてもフォームアプリで統合したいなら、×ボタン無効化したり
FormClosingイベント拾って閉じるのキャンセルして代わりにHideするようにしたりすればいいんじゃない? PowerShellに、Suspend-Service とかRestart-Serviceとか、そのまんまのサービス系のコマンドがいろいろある >>687 です
回答ありがとうございます
FormClosingイベントでウィンドウを閉じたように見せるだけ、というのもあるんですね
試せる環境が今手元に無いのですが、Hideで隠した状態で、ユーザーが再度フォームを立ち上げた場合は、隠したものと新たに起動した2つのフォームが動いている状態になるんでしょうか?
>>692
なるほど、このコマンドのバッチファイルを作っておいてユーザーにはそれをダブルクリックして停止/再開をしてもらうのが手軽かもしれません scコマンドに停止/再開の引数付けたショートカット作ってもいいぞ >>677
最適化と組み合わせ論だっけ?
めちゃくちゃ分厚くて数式だらけだった気がする
全然わからん
あーいうのが読めなくて自信喪失してる最中 >>687
バックグラウンドデーモンを誰が停止・開始制御するかという命題では?
プレビリッジ権限の認証問題がシステム課題であって、APIやパイプラインなどというアクイジションのテクニックなんか些細な問題。
UMLユースケースを書き、SOLID原則のSRP遵守でUSERを明確にし、必要に応じてFACARDやFACTORYで入り口を切り分ける事。
この場合は、認証問題がキモ。 ボタンがどうのこうのではない。 サービスを稼動させたまま外部から設定を変更したい
サービスとの通信は>>689のように名前付きパイプでいいが、操作用UIとは完全に切り離した方がいい
今時のタスクトレイに常駐するタイプのサービスはほぼそうなってるはず
どちらにしろプロセスは別々になるが>>>691みたいな考え方で作るとUI側に余計な権限が残ってしまう恐れがある 拗らせ風のレスはわざでしょ
もともとサービスのスタート・ストップをどうやるつもりだったのかは重要なポイントだと思うよ
最初から必要そうな機能が”追加要件”扱いなのもちょっと臭う まぁ、追加要件で重要なのが出て来るのよくあることじゃし(白目 >>695
組合せ最適化問題じゃね?
多分ナップサック問題が最初の方に出てきただろ
そういうのはだいたい動的計画法で解く
AtCoderのD問題の定番だから洋書なんて読まなくても競プロしてりゃすぐ覚えるぞ 「EDPC」を検索すれば日本人の書いた記事や動画が山ほど見つかると思う >>697
知識が足りなくてきちんと理解出来ていないのですがUIは停止/再開のフラグを投げるだけの機能に限定し、現状収集機能を持っているサービス側とは完全に分けるべきという認識で合っていますか?
元々はこういった機能は必要ないとのことで作り始めたんですが、製造現場としてはデータを出したくないタイミングがあると要望が出たので重要な機能ですが後付けになりました… せっかくサービスアプリケーションにして安定稼働できているなら、
わざわざGUIアプリケーション化せずに、
GUIアプリケーションから名前付きパイプでサービスに指示するだけのほうがいい。
最近Cで非同期の名前付きパイプクライアントを書いて、
C#で非同期の名前付きパイプサーバーを書いたら、
C#のほうがあっという間に書けて感動した。
(Cのほうも非同期ファイルI/Oのコードを元に作ったからすぐできたけど) >>703
>>687はデータ収集の停止や再開だけで、サービスを停止させたいとは書いてないからそれを前提で回答してるけど
サービス停止の影響範囲によってはサービスとの通信すら不要かもしれない。けどそれを知ってるのは本人だけなんだよ
要件を洗い直した方がいいよ サービスアプリはVista以降は別のセッションで動くから、それをGUIから制御したい場合は
制御用のプロセスを生成してサービスとのプロセス間通信手段を確立する必要があるわけよ
ただし要件によっては既存のサービスの停止や再開と状態の参照程度で済むからそれ用のGUIなんて1日もあれば作れるでしょうよ 初心者の質問するスレなのにしれっとプロが質問するのはなんだかなあ
バカは初心者じゃなくても質問していいという判断なのか 金もらってるやつが初心者名乗るのは流石に草
せめて研修中なら名乗ってもいい 入団1年目のプロ野球選手でも今年入社したばかりのアナウンサーでも初心者じゃなく新人だろうに それまでC#触ったこともないけど都合上C#に転向しなきゃいけなくなったらC#は初心者だろw それともあれか、スレタイの初心者はプログラム初心者の意味だったんか?
テンプレにはそんなこと一言も書かれてないけどな 触ったこともないかどうかは関係ない
言葉の定義とかじゃなくプロが初心者を名乗るなってことだよ
Stack Overflow行けよ プロというのはそれで飯食ってるやつのことだろ?
初心者を言い訳にできるはずがないだろ プログラマーのプロをプロフェッショナルのプロと勘違いしてそう 文脈がどうのコンテキストがどうのと言葉の定義に拘った癖に言葉の定義とかじゃないとか言い出すの草 辞書的な言葉の定義じゃなくコンテキストで意味が決まってるからなw
コンテキストを知らないやつと話すのは説明が長くなってしんどいなw 金もらってたらプロならこの業界プロで初心者は普通に存在するだろう
野球選手なんぞを引き合いに出すのが的外れ コンテキストが理解できないやつのためにまとめると、プロなら初心者を言い訳にせずStack Overflowに書けよって話だぞ?w 初心者ならここで質問してもいいだろうって話
金もらってるかどうかは無関係 バーコードリーダーから取得したバーコードデータをフォームアプリの
テキストボックスに入力して、バーコードデータを読み終わったら
処理をするプログラムを作りたいのですが、
バーコードデータの読み込み終了を知るにはどうしたら良いでしょうか。
一文字読み取るごとに終端文字列を判定すれば出来るのかなと思うのですが、
王道のやり方があったらお教え頂きたいです。 >>727
キーボードとして認識されるタイプじゃね >>725
バーコードリーダー付属の設定用紙(なければ公式サイトからダウンロード)で
スキャンデータの末尾にCRLFを付与する設定にすればOK
メーカーによってはアプリで設定するものもあるのでマニュアル読んでね 先頭に別の制御コードを付加して、それを検出してテキストボックスにフォーカス当てるなんてのもよくある バーコードの者ですが、キーボードのように動作してスキャンデータの末尾にCRLFが
付加されるタイプです。
テキストボックスのチェンジイベントごとにテキストボックスの文字を監視すれば
良いかなと思ってるのですが、世間にはもっとスマートなやり方があるのかと思い
聞いてみたのです。
初心者なので、C#相談室には行かず、ふらっと C#の方に来たのですが。。。 素朴な疑問なんだけど、なんでテキストボックスで受けようとした? >>733
HIDとして認識されるバーコードリーダは、言い換えれば単なるキーボード入力でしかないので王道は無い。
(この場合、本物のキーボードをガチャガチャおしながらバーコード読み取るとか意地悪されると思うので、指定桁数とか見て頑張るしかない)
ドライバをインストールして使うようなバーコードリーダならSDKに従えとしか言えない。 >>733
文字を監視するよりキーダウンかキープレスあたりのイベントでキーコードを監視するのがベターかな
文字として表れない制御コードも検知できるから そのテキストボックスにフォーカスしてないと読み取りが正しく入力出来ないとか、馬鹿な仕様だなぁ バーコードの入力をテキストボックスで受ける業務システムなんてごまんとあるがねぇ 逆にキーボードのように動くバーコードリーダーのデータをテキストボックス以外で
入力する方法ってあるのでしょうか。 質問に答えずにバカにするだけの住人wwwwwwwww
あ、ワイのことね。 むしろテキストボックスしかキーボード入力出来ないと思ってる方が不思議だわ
キーフックとか色々あるだろw >>743
仕事できない癖に一丁前に文句だけ言うタイプ >>745
キーボードの入力とバーコードリーダーの入力をどうやって区別するの? バーコード・QRリーダーにシリアルモード無いの? あれば、シリアルで処理すべし。 RawInputというハードウェアを区別して入力を識別できる仕組みがある
https://learn.microsoft.com/ja-jp/windows/win32/inputdev/about-raw-input
でもバーコード読み取りながらキーボード操作するなんて普通はやらないし
大体はEnterが入力されたらtextboxの文字数をチェックして
想定外の文字数が入力されてたらエラーで再度読み取りを促すとかで済ませてそう >>749
安いバーコードリーダー使ってる奴は運用でカバーするしか無いだろw
許容出来ないならプロジェクト自体が破綻してるって事さw >>751
こんなのがあるんだぁ
でも初心者スレにゃ敷居が高いかなw ふらっとC♯で質問をバカにすんなよ
C#相談室に来ちまうだろ
気に入らんならスルーしろ >>750
頭でっかちはだいたいこうやって視野狭窄する そもそも画像そのまま送ってPCで処理するのが一番手間かからないんだがな >>751
業務システムは実際そんなもん
テキストボックスで受けてチェックデジットでチェックして~とかぐらい >>758
そのノリで顧客が直に使うアプリを作ると最悪なユーザビリティのモノになるんだよなぁ
使い方レクチャーしなきゃダメなアプリってまるでマイナポータルみたいw 他にキーボード入力無ければ普通にKeyDownで処理すりゃいいんじゃね
つか、最近のリーダーなら終端文字列設定可能になってるのが多いと思うけどな >>751
バーコードリーダーを複数台繋げられないかと考えていたところなので興味深い。 なんだかんだで考えてあげるお前ら優しいね(*´ω`*) バーコードの者ですが
・1文字入力される度に終端文字を評価して終端文字が来たらコードを確定するやり方は王道
・テキストボックス以外にキーをホックする事もできる
ということが分かりました
世間一般とは外れたやり方をしないで済みそうです
ありがとうございます Visal Studio for Mac2022で自動保存の設定の場所を探してるんですが
見つかりません
ユーザー設定の中にありますか? 完全に自動保存の代わりになるわけじゃないけど、ないのはHot Exitで代替しろってことなんじゃないのかな? 何故か急にBitmap.SetPixelが機能しなくなったんですが原因わかりません。
正方形範囲を青色で縫ってpictureboxに反映させるだけの超シンプルなコードです。
デバッグツール使うと青に塗った後Bitmap.GetPixelで色が反映されてるのは確認取れたんです。
でpictureboxにもちゃんとbitmap指定しました。でもpictureboxは何も変更されません。
適当な新規プロジェクト立てて全く同じコード書いたら普通に機能しました。
ひょっとすればプロジェクトが壊れたなんてことあります? バージョン管理してないんか?
動いてたとこまで戻して差分確認すりゃいいじゃん
してないなら知らん xとyがどこかで入れ替わったとかそういうレベルの質問ではないよね
なんとなく原因がわかる気がするけどまあRefreshの話なんだろうね多分 ググってもジャストミートする良いページが見つからないんだけど
c# picturebox refreshで出てくるのはドボンのページだからそれでいいのかな? 一度目に指定するとそれは即反映される
二度目以降はリフレッシュさせないと反映されない
表示されてる画像をSetPixelしただけで毎回全部書き換えてたらとんでもなく重くなるでしょう
表示のタイミングはこちらで決められますと言うこと ところがwindowが重なったりした後に前に出すと新しい画面に書き換わったりしてる
これはwindowsがアプリのwindowの画像が無効になったので再描画しなさいと命令を出してるため
元から表示されてる画像は表示されていただけでアプリ内で保存されていない
それで新しい画像を表示するしかなくなる >>780
そういうことなんですか!チャットに聞いても分からなかったけど納得しました。
次は何故そういう状況になってしまったか考えないといけないですね。
ありがとうございました! windowsワールドへようこそ!
自分も30年ほど前に同じことにぶち当たった
その時はc#では無かったけど 新規プロジェクトで同じコード書いたら動いたと言う話はなんだったんだ? 勝手な略語を使う馬鹿にまともなことを期待してはいけない どちらかと言うと柔軟性のない君らはアスペルガー症候群なのかもしれないよ >>780
まぁそれがつまるところRefreshなんだけど >>787
リフレッシュは良いんだけどasyncとか出てきて使う様になってバックグラウンドでUI更新しようして出来てないって事に気付いてないとか有るやん
UIスレッドじゃ無いと更新出来ないの知らない人も多いしスレッド切り替える方法知らない人も多い GitHubの使い方が分からない。
つまりこれって書いた差分をマージするってこと?
ブランチとかよくわからんが、支店を出すってこと?
コードをシェアするってことなんだけど、シェアする仲間がいない・・・ そこからわからんなら使わなくていいぞ
C#のスレだしな 支店のオーナーになって本店への併合を目指すゲームだよ >>789
githubも使い方gitと同じだから githubは差分を出してくれるけどcommitは差分じゃない バージョン管理なんだから差分とか考えるなよ
版管理だよ 差分の表示
git diff head^^ head^ 同一ネットワーク内の複数のPCで通信したいけどプロセス間通信って古いかな
今はSocketIOで非同期通信くらいしてないとダメかな
ちなみにフォームアプリの予定w
WPFは工数だけかかって面倒臭そう 複数のPCでプロセス間通信てどれかをサーバーにするしかないじゃん
リモートオブジェクトはなくなったぞ
https://learn.microsoft.com/ja-jp/dotnet/core/porting/net-framework-tech-unavailable
> .NET リモート処理は、.NET 6 以降ではサポートされていません。 .NET リモート処理は、問題のあるアーキテクチャであると判断されました。 これは、現在サポートされていないアプリケーション ドメインとの間の通信に使用されています。 また、リモート処理にはランタイム サポートも必要で、維持するのに高いコストがかかります。 複数のPCってのがざっくりしすぎてるな
1対多ならMinimalAPIでサーバ建てりゃいいんじゃね
詳細はググってくれ 古いも何も、Socketで通信してようが他プロセスと通信する物はすべてプロセス間通信だろ RPCとSocketIOを会話上で使い分けたいって意味かな >>797
どういうプロトコルでのプロセス間通信? そういえば、IpcServer使ってる。
ちゃんと動いてるし、もう、変えたくないわぁ ぎりぎりまで、.netcore系には移りたくないね 既存のアプリケーションを移行したくないのはわかる
けど、null不許容参照型が使えないのはいまどきあり得ない これだからフレームワークありきの環境はダメなんだよ
やっぱC/C++しか信じられん!…ってなるのぉ? 金無限にあるならともかく、現実はフレームワーク使わんと採算とれないことがそこそこある >>798
「リモート処理」って訳されていて最初ピンとこなかったけど、
英語ページを見たらやっぱり.NET Remotingのことなのね。 コンパイラのnullチェックもLinq to SQLが混じるとうまく働かないね。
まぁ限界があるのは分かる Linq To SQLは大昔に終わっているからうまく動かないかもな わたしは今からLinq To SQLを勉強しようといろいろ川俣の本を買ったのですが。 自分自身にとって明確な理由やメリットがあって勉強するならいいと思う。
理由もなく、存在を知ったから目的ないのに勉強するというなら勉強不要。
たとえ話になるけど、ガチでプロ選手目指す野球少年なら野球の練習する意味あるけど、
大谷の話題で野球に興味持ったニワカが、目的なく練習しても意味ないでしょ。 そうでも無いやろ
プロになる気が無くても野球やってみたら才能がある事に気付いたとかあるやん
プロの選手だって高校までは別の競技やってたとか2つ同時にやってたとかあるやん 勉強するならLinq To SQLより後継のefやる方が賢いとは思う
具体的な仕事があるなら別だが efはefで欠点多いからなぁ
自分で選べるならDapperが最強 WebなんかでステートレスならDapperで良いけどデスクトップアプリなんかでステートフルならEFの変更追跡なきゃだるいやん
用途で選べばいいんだよ 変更追跡が役に立つ場面なんてほぼ無いよ
速度は無茶苦茶遅いし
どうしても追跡したいならDapperで使うクラスに変更通知やIEditableObjectでも仕込んでおいたほうがいい そろそろ的外れなたとえ話は罪に問えるようにするべきだな visual studioのformでプロジェクトデザイナーの設定settings.settingsでint型の配列を使いたいん
[10]個ぐらいなんですけど、windowsFormでいい設定の保存方法ありますか? >>825
デザイナーからじゃなくて直接Properties/Settings.settings/Settings.Designer.csに書けばいけるよ
でもデザイナ触るとcs上書きされるからまた追記しないといけないけどね
https://ideone.com/tJGGHq >>826
さんくすです、デザイナーをいじらずListを追加するんですね
Settings.Designer.csを書き換えたことをどこかに書いとかないとダメですね >>828
Settings.csの partial class Settingsを使えってことでしょうか? >>830
サンクスですSettings.csに書けば上書きされないってことですね 通知領域のアイコンをクリックすると現れるメニューを複数列にしてみたいです
こういう場合は自作コントロールを作成する必要があると考えればよいですか?
この辺は未経験なので自分にはハードル高そうですが
昔から使わせて頂いてるMr.Clipboardというソフトウェアに類似するものを作ることが目標です。 ん~contextMenuStripとかをいじって自作コントロールを作るという高いハードルを越えるより
通知領域アイコンをクリックした時に、メニューに似せたフォームが、ちょうどメニューが表示されるような位置に現れるようにしたほうがいいのかな・・・実現可能性は高そう
Mr.Clipboardの作者さんはどうやってこういうものを作ったんだろう 古そうなソフトウェアだから
そもそもContextMenuStripじゃなくてContextMenu(=COMCTL32)を使ってるんじゃないかな
使ったことないから知らんけどひょっとしたら何かデフォルトで2列表示できる機能が備わってたりして >>834
ありがとうございます
画像貼れればいいのですが規制されててダメなんですごめんなさい
Mr.Clipboardを自分のPCで今使っているのですが、通知領域のアイコンをクリックすると、10列表示されます。
文字列を登録することができるのですが、登録数をふやすほど列も増えていく仕様なんです
列数だけではなく、1列当たりの行数なども柔軟に扱えないと実現できないのかなと思ってます。
一応>>833の方向性でやってみることにしました
継承やらオーバーライドやら試してみたい気持ちもあったのですが、.そもそもNETのソースコードを正しく読み解く自信が・・・ 現在進行形でC#の仕事してるけどプログラミングよりもgitとかのほうが難しい
マーキュリアル開いて出てきたMQ パッチ適用がどうたらって何のこと? Git の質問かと思ったら、マーキュリアルの話始めたり
精神分裂症かな 混在してるか移行中のPJで初心者故に両者がごっちゃになってるだけだとエスパーしてみます 単に物を知らないのをバカにしたいだけで本気で精神分裂症とは思っとらんだろ C#ってプロジェクトを作らないとコンパイル出来ないんでしょうか?
main関数のあるHelloWorld.csだけでコンパイルするのは無理? csc.exeを直接実行すれば*.csだけでもコンパイルできるよ
Linux向けとかはどうか知らないけど >>840
C#がインタプリタ的に使えるのって案外知られて無いんだなぁ >>841
Linuxには無さげですね
dotnetコマンドでも無理そう >>842
dotnet-repl を入れたら実行結果の確認は出来るようになった
ありがとう シェルスクリプト代わりにするならC#使うよりPowerShellの方が便利だから
batはそろそろ滅べ batとの互換性が中途半端なのがイラつきますけどね batみたいな化石との互換性なんか要らんだろ
PowerShell使えばC#もそのまま動くぞ
https://codezine.jp/article/detail/5007 talkで質問集まってるみたいだから向こうに行くかな プログラム板住人誰も移住してなさそうだから変わらないんじゃない? あっちはスレッドだけ出来てて中身が空なのばっかりじゃん
C#関連スレは全て1件もレス付いてない jane styleってC#で開発したって聞いたが勘違いかな Delphiだから勘違いだね
Delphiの発明者が後のC#の発明者と同一人物だからそういう勘違いが生まれたのでは 初心者です。
非同期メソッドにCancellationTokenを渡して、エラーハンドリングを行う必要があることを知りました。CancellationTokenSourceからCancellationTokenを作成して、非同期メソッドに渡していくところまではできました。ただ、ネストが深い非同期メソッド内でトークンをキャンセルしたいときに、どのようにキャンセルすれば良いのか分からない状況です。
非同期メソッドからCancellationTokenSourceのCancelメソッドはどのように呼べば良いのでしょうか。 トークンをキャンセルする権限を持ってるのは非同期処理側じゃなくて呼び出し元だと思うんだけど・・・
(だからcancellationTokenSourceを持ってる人だけがCancel()を実行できる)
呼び出し元から指図されたわけじゃないけど自発的にキャンセルしたいってことなら
throw new OperationCanceledException(token)
とでもすればいいんじゃないかな それはtokenの状態と整合性取れないし不自然だろう
普通に(キャンセルしたいと判断した)要因に合った例外使えば済む話だ >>859
>>860
ご回答ありがとうございます。
awaitしている非同期メソッド内で例外を投げて、呼び出し元でcancellationTokenSource.Cancelしてキャンセルする、というのはできました。
ただ、awaitしない非同期メソッド内で例外を投げてもcatchできず、呼び出し元でcancellationTokenSource.Cancelできない状況です。
awaitして、非同期メソッド内で例外を投げて呼び出し元でキャンセルするしかないのでしょうか。 >>861
awaitしない非同期メソッドのタスクにContinueWith()で後続タスクを作って、その中でキャンセルかな。
後続タスクの実行条件はConinueWith()の引数にTaskContinuationOptionsを指定すれば変更出来る。
(エラーが起きた時のみ実行するとか) windowsアプリ作る時にform2の幅をコンストラクタ内で指定しても
136未満だと勝手に136に広げられてしまうんだね
知らなくて原因究明するのに時間かかった >>863
FormBorderStyleプロパティがNone、ToolWindow系、その他で幅が変わるね。
ToolWindowだとタイトルバーに表示されるボタンの有無でもちょっと変わって、
ControlBox = falseの時が一番小さく出来る。
何故かNoneの時が一番大きくなる。
>>864
MinimumSizeがSize(0,0)でもなる 自作クラスのインスタンス化したときに、
そのインスタンスのプロパティを設定するやりかた? を教えてください。
うまい言い方ができないので、例を示します。
自作クラスで
class Square
{
double width
double height
}
があったとして、
Square square = new Square(){width = 3, height =2}
としたならば、
console.Writeline (square.ToString())
とすると
6
と表示されるようなイメージです。
何がしたいのかというと、 IPropertyChanged を使って、中の
プロパティが変化したときに、square が変わったということを認知したいのです。 Writelineで6を表示したければToStringをoverrideしてやればいいだろうまでは思いましたが
貼られたコードと「何がしたいのかというと」が全く繋がってなくて、恐らくこれは誰も質問を理解できてない状況ではないでしょうか
私の感想としてはIPropertyChangedとやらを使いたければ使えばいいだけの話ではないでしょうか 例には書いてないけどIPropertyChangedイベントを購読して、イベントが来たらConsole.WriteLine()するんでしょう
で、IPropertyChangedの実装方法が知りたいと
public class Square : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
private void SetProperty< T >( ref T field, T value, [CallerMemberName]string propertyName = null )
{
if ( field.Equals( value ) )
{
return;
}
field = value;
PropertyChanged?.Invoke( this, new PropertyChangedEventArgs( propertyName ) );
}
private double _width;
public double Width
{
set => SetProperty( ref _width, value );
get => _width;
}
private double _height;
public double Height
{
set => SetProperty( ref _height, value );
get => _height;
}
} >>863 >>865
なんか頭の中で136ってもっとおっきいイメージになってた、すまないw
アイコンやコントロールボタンが表示できる最低サイズだったね
面白いことに、FormBorderStyle=Noneの時に
コンストラクタでどんだけ小さいWidth指定しても136になるけど
その後でShown等のフォームが生成された後の時点でWidth指定すると2までは縮まるんだな
SizableとかだとShownでやっても136になるけど >>865
>>869
はーやっぱり知識ある人は知ってるんですねー
こういう理屈じゃないところでいちいち悩まないといけないのが大変ですわ
まったく別の話なんですけど、
今これ>>832作ってて面白いこと気づきました
MouseClickイベントって右クリック・左クリック別に処理を分けられないじゃないですか
e.Button == MouseButton.Left とかが使えるMouseDown使えって言われるんですけど
bool isRightClickみたいなフィールドつくって、MouseDownのイベントハンドラで右・左判別して結果をisRightClickに設定
んで、MouseDownイベントの直後にMouseClickイベントも発生するからこいつのハンドラでisRightClickを取得して右・左別に処理わけることができた!
ってこれもみんな普通にやってんのかな・・・自分としては大発見なのだが。
今左右クリックやD&Dで細かい動きを作ってるんでこれは貴重な発見だった >>867
>>868
ありがとうございます
質問のしかたが悪くうまく伝わっていないのですが回答は知りたかったことの一部でもありその部分については理解しました。
public class Hoge :IpropertyChanged
{
public Square square
}
とした時に
squareが値をもっていないことから、methodでsquare.widthの値を変えたとしてもsquareか変化したことを認識できないとの理解です
SquareにIPropertyChangedを噛ませてhogeのpropertyが変わったとする方法もあるのかも知れませんがsquare自身に値を持たせる方法があったら教えて下さい >>870
何のMouseClickイベントのこと?
FormやNotifyIconのMouseClickイベントならe.Button使えるはずだけど >>872
今いろいろ確認して、間違えてたことが分かりました
ごめんなさい
複数のラベルをForm上に動的配置したうえで、このラベル全てにクリック系のイベントを追加したんです。
この際、イベントハンドラも自分でコードを書いたのですが、Label_MouseClickイベントハンドラの引数である e の型を、間違えてMouseEventArgsではなくEventArgsとしていたため、e.Buttonが使えなかったというオチでした。
e.Buttonが使えない点を除いて問題なく動いていたので気づきませんでした
ふぅ・・・何やってんだか・・・ MouseDown使わないといけないのはVBAでした
知識がぐちゃぐちゃになってました 赤あげて、白あげて、白下げないで、赤下げる♪
左押して、右押して、右離さずに、左離す♪ VBAはVB.netに仕様変更する気が無いんだろうな・・・ vb6言語より環境が古くさすぎて触るきにならん
出力して、vscodeでやって取り込みもあるけどいまいち >>871
細かいけどINotifyPropertyChangedじゃない?
SquareにINotifyPropertyChangedを実装して、
Hogeの方でこういう風に
Square square {
get { return _square; }
set {
if (_square is not null) _square.PropertyChanged -= OnSquareChanged;
this._square = value;
if (value is not null) _square.PropertyChanged += OnSquareChanged;
}
}
void OnSquareChanged(object sender, PropertyChangedArgs e) {
this.OnPropertyChanged(nameof(this.square));
} 871が言ってる値が何のことかよくわからないな
>square自身に値を持たせる方法 まず環境書けとか色々突っ込み所がありすぎて暑いしで萎えた
おまえら頑張れよ >>871
俺がエスパー回答してやる
Hoge のコンストラクタでsquareをnewする
Square をクラスじゃなくて構造体にする
好きなほうを選べ お前らも含めてだが…基本的なことを勘違いしてるんだろう
IpropertyChangedが必要なのかも怪しいがそれは置いておく
通常似た様なものがあった場合
面積に相当するAreaプロパティが設定されている
binding対象はHoge.Square.Areaに普通はする
さて、
WidthやHeightが変更になった場合にAreaはその都度変化を通知して欲しいのかどうかも気になる
WidthとHeightを同時に変更したい場合メソッドを使って適切に変更しないとゴミがでるぞ Squareの値は各種プロパティを持ったオブジェクト自体でありそれを面積とみなすのはおかしいと言うこと
ToString()をoverrideして面積を出すも間違っている
ToString()で出すのは
四角形 幅:3 高さ:4 面積:12
と言う各種情報 >>882
エスパー ありがとうございます。
square を 構造体にかえて 今までやりたかったことが解決しました。
>>883 ,>>884 ありがとうございます。
勉強になりました。 Func<T, bool>を受け取る引数にPredicate<T>を渡せないのは何故でしょうか? 型が違うから
class Hoge { public string Piyo; }
class Fuga { public string Piyo; }
と同じメンバを持った2つのクラスがあっても
void Test(Hoge hoge) { ... }
にFugaを渡せないのと同じ なるほど。
Predicate<T>ってFunc<T, bool>のシンタックスシュガーかと勝手に勘違いしてましたが、完全に別の型ってことですね。
ありがとうございます 非同期処理について質問です。業務でWPFいじってるんですけど
1 起動画面→2 起動画面表示してる間に重い処理とか色々→3 ログイン画面→4 メイン画面
という流れになっています。それで重い処理の部分がtask runになっていてあぁ非同期処理ってやつかと
なんですがやたら起動画面が長いんです。デバッグしてみるとその重い処理が実行されてるとき他の処理は実行されてなくて
結局普通に1〜4が一直線に進んでるだけじゃない?と
自分の理解だと非同期ってその処理をどっか他の場所でやっといてもらってそれ以外は全部通常通りに流れると
この場合だとたとえば3や4のウインドウが出る処理が進んでいってもその裏で重い処理をやってるみたいな
2の部分が短くなるから起動画面も当然短くなるはずだろ……と思ってたんですが
非同期ってそういうもんじゃないんでしょうか 2の重い処理でUIスレッドを使っていて、
3ログイン画面でもUIスレッドを使うので、
3のレンダリングが遅延しているのかも
と、先生は仰っている たぶん2の実行中に1が固まらない(アニメーションしたりマウス操作等に反応する)ようにしてるだけだな
2が完了したら3って仕様なんだろ その重い処理というのは、ログイン画面やメイン画面までに完了させる必要のない処理なの? 普通だろ
2で初期化
それが終わらないとログインすらさせない
当たり前
非同期はいわゆる並列処理ではない
処理してる間にGUIが固まらないようにしてるだけで 起動時にまずスプラッシュ画面やら表示して裏で初期化処理ガーッとやってメイン画面が出てくるアプリケーション、ごまんとあるやろ 非同期処理って偉そうな名前ついてるけどUIが固まらないようにするためだけの存在なんだよな ”応答なし”って表示されるかどうかは一般利用者にとっては大きな違い 改善したいなら「重い処理」を並列に 分解するぐらいかな?
対して変わらんどころか遅くなるだろうけど 業務アプリでログイン画面表示前に終わらせないといけないやたらと時間のかかる重い処理ってどういうの?
ゲームやJavaアプリではあるけどC#で作る業務アプリでは個人的には経験したことないんだけど
ネットワーク経由で自動アップデートを走らせてるとか? DBから必要なデータ落としてくるとかそういうのかな
そこまで大量になるかどうかはものによる コアモジュールのアップデート確認とか
こういうのを下手にオンデマンド化すると不整合で死者が出たりするんだよ >>901
そういうのならスプラッシュで長々と起動表示するより
さっさと画面見せてプログレスバー出した方が良くね
端的にいうとエクリプスみたいなのは嫌い プログレスバー出してる間はツールバーやらメニューやら触れないように無効化しとくん?
見せてる意味なくない? 業務アプリで認証前に見せるもんなんて何かあんの逆に デスクトップのアイコンダブルクリックしたのになんも画面出て来なかったら
動いてるのか不安になるのがエンドユーザー そらWEBアプリが流行るわな
とりあえず画面は出てくるしな >>907
今時プログレスバー程度じゃアプリの生存確認にはならないかー 出てるプログレスバーがなんのプログレスバーか理解できる使用者がどれほど居るか >>915
何のとか関係ないんだよね>>899に書かれてる通り、
応答なしってなった場合にユーザーがアプリが固まったって思って不安になったり、
人によっては強制終了させたりすることを回避するのが目的でみな実装してると思うよ win11でwindows upadateの元データ読み込みの時間がかかったらタイトルバーで
プログレスバー的なアニメーションが出る タイトルバーで糞判りづらいアニメーションされてもな >>917
プログレスバー出す出さないと応答なしになるかどうかはイコールじゃねぇのよ >>920
もともとは>>890から来てる話のつもりだけど
重たい処理を裏で実行させて画面は動いてます(応答なしになってません)ってのを
ユーザーに伝えるためにプログレスバーだしてると思ってるんだが違うのか?
非同期でもなくプログレスバー出して進捗報告してるだけなら言ってる通りかもね 10秒ならクルクルカーソルでいい
1分超えるならメッセージぐらい出そう
10分レベルだとプログレス必須
つまり非同期は10分超えのみでいい 大多数のユーザーが使う画面作ってないのかわからんけど
10秒程度で画面クリックしたら応答なしになるだけで文句いってくるところもあるからね
10分越えで非同期とかはぬるすぎ
まあこの辺までくるとスレチな感じだから言い逃げになるけど自分はここまでにするわ 苦情は「起動が遅い」だろ?
「応答するともっと遅くなりますよ」で返せばいい 他にもあると思うが、通信、I/O、DBは無条件で非同期や並行処理を意識して設計しないとな 素人はそう考えるけど
待機中のユーザーが他の作業を出来ることは少ない
というか待つだけだろ?
つまり非同期は不要 5秒だか10秒だか
応答しないとOSにフリーズ判定されるでしょ 今時UIが長期間応答しなくなるのは低品質アプリの証
非同期処理が実装しやすいC#では特に コナミ グラディウス バブルシステム起動画面 - YouTube
https://youtu.be/dM-UCiUirj4 >>921
なんか盛大に勘違いしてた、忘れてくれ・・・ >>929
逆に聞きたいけど長時間応答するしかねえって事もあるんじゃないの?
意図的にそうしてるとか >>929
逆に聞きたいけど長時間応答するしかねえって事もあるんじゃないの?
意図的にそうしてるとか 手抜きか技術不足以外で長時間無応答を放置する理由はありません 実行中の処理に影響与えないように応答させないのって普通じゃね? 非同期にするオーバヘッドがないぶん処理が早く終わるしな いつの発想だよ…
UIと時間がかかる処理は別スレッドだし
今時のPCならオーバーヘッドは無いに等しいだろ >>936
UIの制御は必要になるけど、それをしないのは手抜きってやつだ >>936
UIがないアプリなら好きにしろ。
UIがあるならUIのお約束を守れ。守れないのは低品質アプリだ。 まだやってたんだって言うか、1週間近く動きも無く終わったと思われてた話をバカが蒸し返しただけ >>942
応答出来ない=次に応答するのが計算が終わったタイミング
と言うことになる
つまり開始後中断したくてUI(例えば停止ボタン)押して
実際に止まるのが計算完了後で
計算結果が表示される直前に終了してくれるオマケ付き >>946
>>942みたいな過去の遺物みたいなのにかかわらないほうがいいぞ
「そのうち返ってくるでしょ」みたいな考えのやからは一定数いるからな https://atmarkit.itmedia.co.jp/ait/articles/1702/22/news010.html
> Windows上で実行されるアプリケーションのウィンドウは、応答がない状態になると、
> ウィンドウタイトルに「(応答なし)」と表示してユーザーに知らせます。
> “応答がない状態”とは、アプリケーションのプロセスが持つウィンドウオブジェクトが
> 「ウィンドウメッセージ(Window Message)」に5秒(既定)以上、応答しなくなる状態を指します。
こんなん出たんですけどとか言われたら恥ずかしいだろ 真のエコはシングルスレッド非同期
プログラミングコストは爆増するけどな 進捗表示、キャンセルや一時停止を受け付けない設計はクソ。 シリアルポートからの送信を出来るだけ高速に受信したいのですが、下記以外に何かありますでしょうか?
また高速化する方法がありましたら、指摘してください。
よろしくお願いします。
LinkedList<byte> LLBuffer = new LinkedList<byte>();
SerialPort sp = new SerialPort();
byte[] buf = Encoding.ASCII.GetBytes(sp.ReadExisting());
foreach(byte b in data)
LLBuffer.AddLast(b); >>955
単なる生バイト配列が欲しいんだったらEncoding.ASCII.GetBytes(sp.ReadExisting())は二重に無駄な事してるから
var buf = new byte[1024];
int count = sp.Read(buf, 0, buf.Length);
for (int i = 0; i < count; ++i) LLBuffer.AddLast(buf[i]); >>956
ありがとうございます。
現在は1024バイト固定で受信しているのですが、
sp.ReadBufferSize()で見ているとどんどんシリアルポートのバッファが溜まって頭打ちになっているので、
アプリ側で出来るだけ取得しておきたいと思い、sp.ReadExisting()の使用を検討しているところです。 >>957
IOの方が早いなんてことは有り得ないからwhileで回すとかはしてる?
内部バッファが空の時にsp.Read(buf, 0, buf.Length)するとブロックされちゃうのかな
そうじゃないならwhile ((count = sp.Read(buf, 0, buf.Length)) != 0)、
ブロックされるとしてそれが嫌ならsp.BytesToReadで溜まってるバイト数チェックやDataReceivedイベントで拾うとか 誰も突っ込まないけどシリアル受信に間に合わないは普通にあり得るくね、 シリアルってだけで実際のスピードもハードスペックもPCの使用状況も書いてないけど
個人的意見なら、いまどきのハードでC#で普通に作って間に合わんなんて、
他に何か原因がなければ想像できんレベルだが 同期9600bps を試しにやってみたまえ。
LANCとかやね .NET7でnlogがあれやこれやしてもうんともすんとも言わないので
おすすめのログのライブラリとかありまふか nugetのランキング上位にあるやつ使えるのでは? .NET7でNLog普通に使えてるけどなぁ
ちょっと前のバージョン(5.1.4)だからか? nugetの最新(5.2.2)にしたけど使えてるな その程度で驚くヤツはくるみぽんちおの刑だな。
うちの製品なんて、.net framework 1.1 使ってる製品もある。
しかも重要ユーザーからの要望があれば機能追加までしてる。 OSにしてもランタイムにしても、古いのずっと生き残ってるのあるあるだよな
うちの顧客なんてVB6製アプリをXPで動かしてるとこまだあるしな…… ニューテクノロジ4か
名前にニューって付けて年月経つと碌なことにならないな NLog動くようになった!
コードで設定すると動く、でもConfigは反映されないからと色々やってたら
「出力ディレクトリをコピー」
「ビルドアクション」
を設定してないことに気づいた
C#(てかVS)久しぶりすぎて各ファイルにあるプロパティの存在を忘れてたw ふぅ・・・例外握りつぶしてたぜ・・やっと不具合原因のとっかかり見つけた byte high = 0xff;;
bool flag = (high & 0b10000000) != 0;
これをもっとC#っぽくできないの? >>975
フラグをenum定義したら
[Flags]
enum Hoge : byte
{
Flag0 = 1 << 0,
Flag1 = 1 << 1,
...
Flag7 = 1 << 7,
}
var high = ( Hoge )0xff;
high.HasFlag( Hoge.Flag7 ); enumに属性がなんか気持ち悪いし…使用時にキャストしてるのもなんだかな
#defineが無い弊害がこういうとこで出るのか
C/C++のビット演算はイディオムで綺麗に書けるのにな 途中で書き込んじゃった
enumに↓を追加
All = Flag0 | Flag1 | Flag2 | Flag3 | Flag4 | Flag5 | Flag6 | Flag7,
var high = Hoge.All; 個人的には、Flagsよりも定義でビットシフトしてるんがなんか嫌だなw
>>975でも十分C#っぽい気はするけどねぇ
C/C++でif(high & 0x80)で済むのはBOOLの実体が数値だからで
C#のboolは別物だからしょうがないし >>980
ビットシフトで定義するかは好みと慣れだな
C言語でも見かけるし
一応、何ビット目かソース上ではっきりするってメリットがある 何ビット目かって表現なら、それこそ>>975の方がC#では普通になったんじゃない? ラムダ式ってこうちょろちょろっとした処理を書くのに使うものであってでかい処理は関数定義するのが基本って認識だったんですけど間違ってますかね
もう今のプロジェクトラムダ式渡すところで数十行の関数がガンガン出てきてて
デバッグしにくいわかりにくいでげんなりしています。まぁこれに限らずそもそも表に出る機能単位でしか考えてないのか関数抽出するって考え方があんま無いみたいな現場なんですが…… >>985
どうとでもいえるけど基本的にはその使い方は特に間違ってはいないので認識が間違っていると思う
処理の委譲目的ならそれが普通かも
関数抽出しやすいなら関数を抽出する
ローカル変数などに依存度が高いならそのまんま書いたほうがいい
設計がしっかりしてクラスを作ってそれを渡しあってるとかなら別だけどそんなことしてられないと思う デバッグしたいなら1処理ずつ分けて書き直しゃいいだろ
C#のlambdaはdelegateの意味も暗黙に含んでるからそのものは削らない方がいいけど 同じ処理を他でも使うならメソッド化した方がいいと思うけど、そこでしかやらないならラムダでかまわんと思うけどな
今やローカル関数なんてのもあるし closedxmlでセルに書き込み反映されない…なんで😭 jsonのテキストをデコードできる関数ないかな?
htmlでいうところのHttpUtility.HtmlDecode()のjson文字列版
「https:\u002F\u002Fwww」を「https://www」に変換したい
そんなの自作しろと言われたらそれまでだけど、あるならあるの使いたいので ちょっと前にTwitterのデータ取得して遊んでた時はRegex.Unescapeでやってたけど そこで普通にjsonパーサ使おうと思わないの何でなん JsonNode.Parseでゲットした配列から取り出した文字列をRegex.Unescapeにかけたんだけどね jsonがあるわけじゃなかったから
適当なclass用意して文字列をjsonの書式にフォーマットしてパースして取り出すって流れは気分的にやりたくなかった "hoge"だけみたいな文字列も整形式のJSONだよ
JsonSerializer.Deserialize<string>("\"hoge\"");
生の文字列なら前後に二重引用符付ける必要はあるだろうけど 試したら動いた。stringクラス指定だけでできたのか。それは知らなかった このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 148日 7時間 21分 47秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。