22/01/08 01:03:56.61 IGpBQzM50.net
その後10時間もマウンティングゴリラしてたのかw
583:デフォルトの名無しさん
22/01/08 02:44:00.27 1bILROxT0.net
大昔にVBで作られた社内業務アプリをC#で作り直す事になったけど、
GUIはWinForms?WPF?WinUI?どれが一番メジャーなの?
WPFは死んでるとか言われてるようだし、WinUIは出たばかりで情報少ないっぽいし、古いけどWinFormsがいいの?
584:デフォルトの名無しさん
22/01/08 03:02:40.46 35B5Rb5B0.net
>>573
一番メジャーなのはWinFormsだけど
社内でよく使われているモニターが高解像度で
スケーリング表示をきれいにしたいなら
WPFかWinUIの方がいいよ
585:デフォルトの名無しさん
22/01/08 03:13:30.02 IEuXTu700.net
WinFormsって2番目だぞ
1番使われているのはWPF
社内アプリならとりあえず.NETのバージョンは6にしたほうがいいな
以前のとパフォーマンスが段違いなので
586:デフォルトの名無しさん
22/01/08 04:22:41.48 BHQyctLJa.net
>>573
何がベストかは結局何を重視するのかの関数だよね。
だからたぶん各選択肢のいわゆるpros and consを挙げてもらった方がよい気がする
コスト重視ならVBにもっとも近いFormがベストだ。
視覚効果や高DPI対応が重要ならWPFがベストだけど、学習コストが高いし、
はっきり言ってパフォーマンス的にまったく使えない分野もある。
WinUIは知らんw
587:デフォルトの名無しさん
22/01/08 06:02:52.91 35B5Rb5B0.net
一番楽チンなのはVS2008のコンバーター使ってVB6→VB.netにコンバートし、コンパイルエラーが発生する部分をちょいと修正する事
複雑な計算式使ってる場合に計算式の移植間違いを防げる
588:デフォルトの名無しさん
22/01/08 09:09:54.52 LhcZsKvbM.net
>>571
Delphi に GC あったっけ?
589:デフォルトの名無しさん
22/01/08 09:30:56.43 qvdwzZse0.net
>>578
ないと思う
590:デフォルトの名無しさん
22/01/08 09:56:39.05 PHIkImNk0.net
関係ないけど、こういう案件て段々広がって収拾つかなくなるか、
客がビビりはじめて結局ほぼ何もしてない変わらないみたいになるか、
ってなりがちよね
客にも腰据えてもらわないとぐだぐだになる
591:デフォルトの名無しさん
22/01/08 10:52:45.90 76ewE+lX0.net
Webで作るという選択肢はないのかな?
ある程度の規模があるところなら配布やサポートコストまで考えるとWebのほうが安上がり
592:デフォルトの名無しさん
22/01/08 11:16:30.10 6MOJW9HWM.net
社内業務アプリの内容によるけど今どきならWebだろうね
サーバーやDBMSの構築すらままならんとかならしゃーないけど
593:デフォルトの名無しさん
22/01/08 11:21:14.11 eHBvCcl00.net
クラサバとかの業務システムをWeb化するのはよくある話だが、スタンドアロンで済む
ただのGUIアプリをわざわざWeb化するのは割に合わんと思うがな。
それを上回るなにかメリットがないと。
594:デフォルトの名無しさん
22/01/08 11:32:33.07 Sgj71hWsa.net
データをサーバー管理するようなのならまだしも、普通のアプリなら普通に作ったほうが圧倒的に楽
595:デフォルトの名無しさん
22/01/08 12:01:38.53 6MOJW9HWM.net
今どき社内業務システムでローカルに閉じてるやつなんてある?
596:デフォルトの名無しさん
22/01/08 12:13:29.45 qVp9qlx6r.net
ローカルアプリから直接DB見に行くとかならあるんじゃね
ストアで更新配賦とか夢見たこともあったなあ
597:デフォルトの名無しさん
22/01/08 12:18:21.83 eHBvCcl00.net
>>573の業務アプリというのがどういうものかは>>573に聞いてみなけりゃわからんが、
業務で使う内製アプリがスタンドアロンだって例はいくらでもあると思うが。
逆に、なんで無いと思ったの?
598:デフォルトの名無しさん
22/01/08 12:18:22.15 Sgj71hWsa.net
社内業務アプリって言ってもいわゆる業務管理システムだけじゃないからな
ローカル完結なんていくらでもある
ちょっとしたツール類なんて全部そうだろ
599:デフォルトの名無しさん
22/01/08 12:45:29.08 +n5rVMIfd.net
Web化すべき案件なら最初からそっちで検討してるんだから余計なお世話やで
600:デフォルトの名無しさん
22/01/08 12:47:06.13 v0nm/uLMM.net
ツール類って具体的には?
そりや業務端末でも一般的なフリーソフトとか使ってることはあるけど、
業務用に作られたスタンドアロンなツールなんて機器制御関連以外では滅多に見かけないわ
システム連携が不完全なためにローカルなアプリやVBAで局所的な自動化をやってるケースはあるけど、結局その入出力は手動で他と連携するわけで、スタンドアロンとは違うでしょ
601:デフォルトの名無しさん
22/01/08 12:48:22.96 35B5Rb5B0.net
スタンドアロンで作るって言ってるのにしつこいな
602:デフォルトの名無しさん
22/01/08 12:50:35.22 VCGpsaaV0.net
VisualStudioでデバッグ中に変数やらクラスの中身を追っていくとき
大量にプロパティがあるとアルファベットの後半追うのに
▼で下まで流すのがかなりまどろっこしいんですが
スクロールバーもでないし・・・
もうちょっとスムーズにする方法ってあるんですかね
603:デフォルトの名無しさん
22/01/08 13:01:28.24 Sgj71hWsa.net
>>590
テキストファイルの文字数や段落数カウントするだけ
指定したウインドウのスクリーンショットを取るだけ
画像をpngにするだけ
ファイルをリネームするだけ
動画からフレームや動画を切り出すだけ
こういうの実際に作ったツールだな。フリーソフトでもできるけどそういうのも開発することあるんだよ
604:デフォルトの名無しさん
22/01/08 13:24:30.41 a4nwkm/0M.net
デスクトップアプリじゃなきゃダメな強い理由がなければ
WinFormならともかく今からWPFとかやるのは無駄だよね
605:デフォルトの名無しさん
22/01/08 13:25:51.14 a4nwkm/0M.net
>>592
ウォッチ式?
606:デフォルトの名無しさん
22/01/08 13:29:23.33 Rc/Af6wIM.net
>>593
そう言うのを社内業務アプリって言うの?
607:デフォルトの名無しさん
22/01/08 13:37:12.89 Kbht7+jO0.net
やっつけアプリ、やっつけツールと言います
608:デフォルトの名無しさん
22/01/08 13:38:58.06 OnpKeph7a.net
>>596
仕事に使うなら全部業務アプリだろ
区別する意味はないと思うが
609:デフォルトの名無しさん
22/01/08 14:16:08.90 sJWr1x2I0.net
業務といっても何を指すかで見当違いなことを言い合ってたりするからな
ちなみに俺は追記式で容量が10メガ超えるログファイルを待ち時間なしに検索&色分けフィルターするビューアー
が必要だったので作った
610:デフォルトの名無しさん
22/01/08 14:19:48.42 QfvG5fL40.net
プロパティの値についてなんですが
値が変わらないプロパティに関しては
Visual Studioの右側のプロパティから変更するのか
それともForm1.csのなかで変更するのどっちが王道でしょうか?
611:デフォルトの名無しさん
22/01/08 14:22:07.76 LyVlYLKR0.net
>>600
Visual Studio
612:デフォルトの名無しさん
22/01/08 14:45:55.87 Sgj71hWsa.net
変更したってことを把握しにくいからできるだけForm1.csだな
613:デフォルトの名無しさん
22/01/08 18:25:53.14 W7HGPhnA0.net
>>595
変数にカーソル合わせてポップアップででてくるクラスや変数の中身がでますよね
デバッグ中にそれで実際に入っている値を追っていくことがよくあるんですが
大量にあるとアルファベット順に並んでいるせいで
たとえば コンボボックスでいうと Selected~まで見に行くのに
Sまで下りてこなければならないですよね
ポップアップにはスクロールバーもでないから毎回スクロールしないとならなくて
それが面倒で・・・
614:デフォルトの名無しさん
22/01/08 19:02:53.17 9AShM9M8a.net
デバッグで実行止めてるときに、デバッグ->ウインドウ->ウォッチでウォッチ1開いて、そこに見たい変数をドラッグ&ドロップ
配列の一部だけ見たいなら.Skip(100).Take(20)みたいに適当なlinqでもつけて
615:デフォルトの名無しさん
22/01/08 21:28:00.33 WWAiwq7Z0.net
ArrayクラスのResizeメソッドの引数が参照渡しなのは何故ですか?
他のReverseやSortメソッドが値渡しなので統一されていないと感じてしまうのですが
616:デフォルトの名無しさん
22/01/08 21:31:36.72 7PajA1910.net
ReverseやSortは要素を置き換えるだけで済むけど
配列は固定長である以上Resizeするには新しく配列を作り直すしかない
617:デフォルトの名無しさん
22/01/08 22:55:18.70 W7HGPhnA0.net
>>604
レスありがとうございます
ウォッチ、使ったことがなくて知らなかったです
クイックウォッチでも簡単に見渡せるんですごく楽になりました
感謝です
618:デフォルトの名無しさん
22/01/08 23:12:33.36 WWAiwq7Z0.net
>>606
ありがとうございました
納得しました
619:デフォルトの名無しさん
22/01/10 02:13:23.67 LmDP/A0i0.net
.net6だとプロジェクト作成時にいつものusing systemとかが無かったんですけど暗黙的に使えるようになったか、あるいはどっかに記述を引っ越したんですかね?
620:デフォルトの名無しさん
22/01/10 03:14:56.13 t77ZMTfv0.net
global usingとかいう迷走の果てみたいなものがあったような覚えがある
621:デフォルトの名無しさん
22/01/10 16:59:27.76 9R5shyc4d.net
>>609
.csproj見てみ
622:デフォルトの名無しさん
22/01/10 18:05:28.98 LmDP/A0i0.net
>>611
Implicitusingsってやつですか
このglobal usingってのはユーザが任意に追加できるんですかね?.net標準分だけ?標準だけだと有り難みがイマイチ・・・
623:デフォルトの名無しさん
22/01/10 18:14:37.58 Fbfc1ztE0.net
implicitなのはSDKで固定のはず
global using自体は.csprojに自由に書けるよ
URLリンク(ufcpp.net)
624:デフォルトの名無しさん
22/01/10 18:32:28.44 Fbfc1ztE0.net
というか.csにも普通に書けるよ
625:デフォルトの名無しさん
22/01/10 19:26:41.39 mJ9SvVvR0.net
というか.txtにも.hogeにも普通に書けるよ
626:デフォルトの名無しさん
22/01/10 19:32:53.98 Yn6t3tioM.net
>>614
書けるけど1つに書くと全ファイルに影響するのは怖くね?
なんかやりすぎ感ハンパない
627:デフォルトの名無しさん
22/01/10 20:21:18.79 mJ9SvVvR0.net
>>615
悪ふざけじゃなくて、書いたらちゃんと認識されるよって意味ね。
628:デフォルトの名無しさん
22/01/10 21:15:40.34 zf/OU/S30.net
え、readme.txtとかに書いてても影響しちゃうの?
629:デフォルトの名無しさん
22/01/10 22:20:21.82 pzAlxVbU0.net
何度も同じことを書かせる仕組みはプログラムの基本的な考えと違うと考えればglobal usingは妥当
630:デフォルトの名無しさん
22/01/10 22:45:07.71 zjcR70ev0.net
global usingもあれば楽だけど書ける場所は限定された方が良かったような
631:デフォルトの名無しさん
22/01/11 06:33:56.47 TdDX7t/9M.net
>>619
それなら.csprojとかでいいでしょ
どこかに書いたら全体に影響するのはなんか違う
632:デフォルトの名無しさん
22/01/11 07:14:14.80 qLFRpNWYM.net
もうあっちゃう時点でキモいから書けるなら制限なしでいいでしょ
633:デフォルトの名無しさん
22/01/11 08:18:04.81 34v9AEL90.net
VS2022からC#やる人は結構わかりにくいやろなぁ。
なぜimportもusingもなにも書いてないのに、Console.Writel...
みたいにいきなり書けるのみたいな。
グローバルにいきなり書いてるがクラスに属さないグローバル変数はあるのないのとか。
634:デフォルトの名無しさん
22/01/11 09:25:26.02 7v4JZSk/0.net
えーーーんTT
Console Programつくろうとしたらmain()がないよー><
なにこれ、こわい><
たすけてー
635:デフォルトの名無しさん
22/01/11 09:36:34.63 qBZtvv4T0.net
従来のようなプロジェクトテンプレートでもプロジェクトを作れるようなオプションなりテンプレートなりあればいいのにね
テンプレートぐらい自分で作れって?面倒じゃん
636:デフォルトの名無しさん
22/01/11 11:21:28.14 MvizqUHc0.net
>>625
.NET 5.0をターゲットにプロジェクト作成してから.NET 6.0にターゲット変更する
URLリンク(docs.microsoft.com)
637:デフォルトの名無しさん
22/01/11 11:57:17.32 7v4JZSk/0.net
C#作ってる人たちはC#をスクリプトにしたいの??
何を目指してるのかよくわからない
638:デフォルトの名無しさん
22/01/11 12:22:25.87 4qGoqi+ca.net
なんでもできることを目指してるんだよ
もちろんスクリプトとしても使えるぞ。アプリの拡張プラグインをc#スクリプトにするとか簡単にできる
639:デフォルトの名無しさん
22/01/11 13:10:40.24 Grp1ZbCtM.net
>>627
IDEによるコード生成を完全に排除しようとしている、と考えると理解しやすい
最近の内製系の開発では、コードの自動生成は避けてソースを極力コンパクトに保とう、という考え方が主流になっているんだよ
640:デフォルトの名無しさん
22/01/11 13:50:01.49 luTEChNva.net
何で自動生成やめたらコードがコンパクトになるの?
そんなわけないと思うんだけどw
641:デフォルトの名無しさん
22/01/11 13:58:30.81 /T2lNEPNM.net
コードの自動生成と言うか簡便さを求めてるのだろう
他の簡易な言語と比べると不必要な部分があるからそれを簡略化する
ボイラープレート(決まり切った特定のコードの記述 )やおまじないのような入門者にとって敷居の高いものを減らす
それ自体は問題ないはず
C#は言語的に無駄な記述が多すぎたから一気に来たんだろうな
642:デフォルトの名無しさん
22/01/11 14:02:02.73 /T2lNEPNM.net
ファイル内のnamespaceは一個なのにそのためにインデントが一つ増えてエディタでのコードが見通しが悪くなる
こんなの早くから導入してくれと思ってた
643:デフォルトの名無しさん
22/01/11 14:14:24.58 Jt6jcb4u0.net
てかusingみたいに冒頭宣言みたくできればよかったのにな
644:デフォルトの名無しさん
22/01/11 14:35:22.28 8rbbEYvA0.net
>>629
コードの自動生成はむしろ最近より進んでるやろ
gRPC周りやソースジェネレーターなんてその最たるもの
645:デフォルトの名無しさん
22/01/11 14:56:40.93 luTEChNva.net
>>631
それってVBの思想だよねw
ただしい選択とは思えんな
646:デフォルトの名無しさん
22/01/12 00:03:33.81 3DcpczOy0.net
スクリプトとしては異常に使いにくいよ、
特にアプリのプラグインとしては致命的。
やったことあるひとならわかるよね。
スクリプトだろうと1回実行したら、そのクラス型は解放されないから。
.netは型生成してしまうと、そのクラス型は基本的にアプリ終わるまで解放されない、
間違ったと思ってクラス型の部分のスクリプト変更して再実行しても反映できないのよ、アプリ終了しないと
クラス型が解放されないから。
647:デフォルトの名無しさん
22/01/12 04:14:45.93 qMg3RrrS0.net
コンパクトに書けるようになっていくのはいいと思う
元のC#は長く書くことを是としていたようで他の言語と比べると見栄えが悪い
648:デフォルトの名無しさん
22/01/12 10:32:03.61 2Wvp4VJl0.net
C#はいいんだけど、ASP他諸々がなあ
Authorize入れるのも一苦労
649:デフォルトの名無しさん
22/01/12 13:15:42.75 ++K/dCbX0.net
何に比べてどう苦労するの?
650:デフォルトの名無しさん
22/01/12 15:39:18.51 BLJCWDpKa.net
>>636
作り方しだいだけどアプリ終了しなくても
スクリプト実行&終了→スクリプトファイル書き換え→スクリプト実行で書き換えた編集が反映されるよ
開放されないってのと反映されないってのは別問題でしょ
651:デフォルトの名無しさん
22/01/12 18:17:31.66 C1xp3kdWM.net
おれはC#とASP.NET Core WebAPIが最もやりやすい
フロントは流石にReactとか使ったほうが楽だがJSもAltJSも罠だらけで洗練されてないね
652:デフォルトの名無しさん
22/01/12 22:52:04.20 JXqJfbQh0.net
>>636
まさにクラスを書き換えて実行するのをやってるけど
そんな現象に出くわしたことがないぞ?
653:デフォルトの名無しさん
22/01/13 06:18:56.80 hEm3mWj0M.net
>>642
糞アプリの名前も書けない無能の相手すんなよ
654:デフォルトの名無しさん
22/01/13 18:48:22.57 OK31jUfcd.net
質問です。
ピクチャーボックスに描画された物をボタン投下で色を印刷用に変更したいです。
元は背景色黒。線は水色。文字は黄色。四角は緑色塗りされてる物を
背景色白、四角は外枠黒線白塗り、他黒に変更したいです。
これを参考に弄って、背景色は直変更し、線は無事変更、文字は滲んだ感じになり、ほかはそのままでした。
URLリンク(dobon.net)
こんなのやるなら色を再設定して再描画した方が早いですかね?
イメージ的にはCADで書いてる物を印刷時に白黒反転するみたいな感じなんですが。
655:デフォルトの名無しさん
22/01/13 19:01:26.19 Lka/sttda.net
>>644
印刷の品質の観点から言っても「ビットマップを流用する」
という発想自体が不適切で、「描画処理を流用する」べきでしょうね。
656:デフォルトの名無しさん
22/01/14 07:06:02.10 uASM5+QH0.net
.net 6の Windows Forms の TreeView のサブクラスを作ったのですが、
サブクラスでOnMouseDownをオーバーライドすると動くのに、OnMouseClickをオーバーライドしても動きません。
何が原因でしょうか?
657:デフォルトの名無しさん
22/01/14 09:52:38.44 Wn0kK1te0.net
そもそもTreeViewのMouseClickはノードのある行の部分しか発生しないけど
ノード上でクリックしても反応しないの?
658:デフォルトの名無しさん
22/01/14 23:45:25.88 8g6TvuWW0.net
こういう実装の隠蔽ってありだと思う?
URLリンク(ideone.com)
リポジトリクラスでしか使わないキークラスを外部から勝手に生成されたくないっていう着想なんだが、
特定のクラスからのみメソッド叩かせたいときとかにも使えそうな気はする
雁字搦め感は出てるし、将来の健忘症になった俺が手を付けてしまう恐れも減るしでメリットはある
ただぶっちゃけちまうとinternalで十分では?と他でもない俺自身が思ってしまった
659:デフォルトの名無しさん
22/01/15 00:11:45.90 TZiSYT8I0.net
質問させてください
using System.Collections.Generic;
class TestEnumerable
{
static public Ienumerable FromTo()
{
yield return 1;
yield return 3.14;
}
static void Main(string[] args)
{
foreach(var I in FromTo())
{
Console.Write(I);
}
}
}
上記のようなコードがあった場合
yield return1を表示、続きから実行されて
yield return3.14を表示すると思うのですが
そのあと、メソッドが終了した場合の処理がイメージできません
FromTo()メソッドが終了した後は何か値がreturnされるのでしょうか?
FromTo()メソッド終了時の挙動の詳細を教えてほしいです
660:デフォルトの名無しさん
22/01/15 00:15:49.41 Fo59HrKfa.net
CreateProxyをpublicにしないとエラーになるんじゃないかな
661:デフォルトの名無しさん
22/01/15 00:20:28.44 dZ7wz90eM.net
yieldを使ってるメソッドの末尾には
「yield break」が暗黙のうちに挿入される、みたいなイメージをもっておけばいいんじゃないかな
662:デフォルトの名無しさん
22/01/15 00:35:37.46 RH/JKl1ia.net
>>650
そんなページ開いたらダイレクトに書いてあることを指摘されたいわけじゃないんだ
ニュアンス通じれば良いかなって思いながらも一応直したんだけど張るURLを間違えたんだよ
663:デフォルトの名無しさん
22/01/15 01:00:14.09 e/r7AWqZ0.net
は?
664:デフォルトの名無しさん
22/01/15 01:05:14.25 mkRG7Oi7a.net
>>649
メソッドのシグネチャのみたまんま
FromToはIEnumerableを返すのであって1とか3.14を返すんじゃない。
何言ってるのか理解できなかったら川俣さんの記事のイテレーターの
説明でも読んでもらった方が早いよ。
665:デフォルトの名無しさん
22/01/15 01:10:18.60 JIhdD5Fq0.net
>>648
キークラスから派生してリポジトリクラスって構造が変
駄目な継承の使い方だと思う
666:デフォルトの名無しさん
22/01/15 01:25:11.79 z3QAlxXC0.net
>>655
キー生成クラスだぞ?
本来リポジトリ内部で生成するものなのに基底に置いては駄目とは何ぞ
667:デフォルトの名無しさん
22/01/15 01:43:23.33 JIhdD5Fq0.net
>>656
この場合は継承(is-a)ではなく包含(has-a)にすべき
668:デフォルトの名無しさん
22/01/15 01:57:04.48 mkRG7Oi7a.net
>>648
VBは確か型Bが型Aの内側で定義されている時、
BのインスタンスをAが握っているとBのprivateメンバーに
アクセスできる裏技があった気がしたんでVBならそれを使う手はあったかも。
試してみたらやはりC#ではできないw
669:デフォルトの名無しさん
22/01/15 02:01:13.57 mkRG7Oi7a.net
まあセキリティー的な目的じゃなく単なる精神衛生の問題なら
単純にKeyのコンストラクタをprivateにして必要な個所ではリフレクションで使えばいいよね
670:デフォルトの名無しさん
22/01/15 02:49:41.70 mkRG7Oi7a.net
「早い者勝ち」にしちゃうのもありかなとか思った。いやねーかw
public class Key
{
public int Value { get; private set; }
private static int serial = 0;
private static Func<Key> func = () => new Key(serial++);
private Key(int val)
{
Value = val;
}
public static Func<Key> GetCreator()
{
var ret = func; func = null;
return func;
}
}
671:デフォルトの名無しさん
22/01/15 03:06:56.37 ccrjJyGq0.net
>>649
関数内にyield returnがあったらイテレータブロック扱いになって普通の関数じゃなくなる
IEnumerable<T>の約束通り、Tの要素を返してって終端がきたらおわり
672:デフォルトの名無しさん
22/01/15 11:19:56.44 6qmp/Z4R0.net
>>649
FromTo()が返すのはIEnumerable
foreachは大雑把に言えば↓に展開される
var iterator = FromTo().GetEnumerator();
while (iterator.MoveNext()){
var I = iterator.Current;
Console.WriteLine(I);
}
イテレータとかイテラブルでググるといい
.NETの型名だとIEnumrator<T>とIEnumerable<T>
673:デフォルトの名無しさん
22/01/15 12:29:33.15 mY1vrnaaM.net
>>651 有能
>>654,662 無能、聞きたいのはお前のチンケな知識じゃねーよ
674:デフォルトの名無しさん
22/01/15 13:44:23.87 agiarv77a.net
>>663
馬鹿だねこいつw
質問した人と別人みたいだけど
675:デフォルトの名無しさん
22/01/15 14:20:07.42 XKyr/S8qM.net
馬鹿としか言えない無能w
676:デフォルトの名無しさん
22/01/15 14:24:42.58 6Adwrh4F0.net
今週のNDワッチョイ
ドコグロ MM4f-KcIn
677:デフォルトの名無しさん
22/01/15 14:48:33.55 6bjOtxZz0.net
WindowFormでTimerクラスを使ってlabelのTextを定期的に変更したのですが
「有効ではないスレッド間の操作」ということでエラーになってしまいます。
どのようにすれば実現できるでしょうか?
public Form1()
{
InitializeComponent();
var timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(OnElapsed_TimersTimer);
timer.Interval = 5000;
timer.Start();
}
private void OnElapsed_TimersTimer(object sender, ElapsedEventArgs e)
{
label1.Text = "1";
}
678:デフォルトの名無しさん
22/01/15 14:53:57.88 OfoSB/Yx0.net
>>667
Timerには何種類かあって
WinFormsならSystem.Windows.Forms.Timerクラスを使うのが簡単
679:デフォルトの名無しさん
22/01/15 14:56:31.51 2bsBwYtoa.net
スレッド間の~は
Invoke((MethodInvoker)delegate{処理});
ってやればわんちゃん
680:デフォルトの名無しさん
22/01/15 16:08:48.34 6bjOtxZz0.net
Windows.Forms.Timerクラスでやりたいことができました!
後学のため、Invokeも調べたいと思います
ありがとうございます
681:デフォルトの名無しさん
22/01/15 20:02:17.15 XKyr/S8qM.net
>>666
黙ってNGできない無能w
682:デフォルトの名無しさん
22/01/16 04:00:49.97 az6Mfsfa0.net
OpenCVSharp入れたらexeのフォルダがdllだらけになったんですが、
これ全部リリースの時にこのまま一緒に渡さないといけないんですか?
exe1個にまとめられないんですか?
683:デフォルトの名無しさん
22/01/16 07:00:20.21 DVPU1vQA0.net
>>672
単一ファイルの配置と実行可能ファイル
URLリンク(docs.microsoft.com)
684:デフォルトの名無しさん
22/01/16 10:03:18.59 gWCKJdmK0.net
ネイティブじゃね?
685:デフォルトの名無しさん
22/01/16 10:19:22.15 1ZlPRUHva.net
インストーラーのexeひとつ渡せばおk
686:漆黒の翼
22/01/16 20:01:08.59 VfeV/Qg80.net
教えていただきたいのですがWindowsでc#のプログラムが落ちた時にメモリダンプを吐くようにするにはどうすればいいのでしょうか?
よろしくお願いいたします
687:デフォルトの名無しさん
22/01/16 20:14:28.43 8g0F/aL60.net
メモリダンプ吐くと何かわかるん?
688:漆黒の翼
22/01/16 20:18:34.35 VfeV/Qg80.net
>>677
メモリダンプをvisual studioに食わせるといろいろ分かります!!
689:デフォルトの名無しさん
22/01/16 20:19:29.37 el47HiNu0.net
メモリダンプを解析できない人たちのスレですよ、ここは。
690:デフォルトの名無しさん
22/01/16 20:22:15.01 F2RYBHf20.net
明らかに"初心者用"の範疇を超えているよね
691:デフォルトの名無しさん
22/01/16 20:34:12.82 T486FPBl0.net
C#でゲロ吐く方法はしらん
Windows Error Reportingで取得するはずなので、呼び出せば行けるかもしれない
692:デフォルトの名無しさん
22/01/16 20:41:28.24 X0X6y0PK0.net
先輩社員から「まずはメモリダンプとって調べてみろよ」と無理難題言われたとか
693:デフォルトの名無しさん
22/01/16 20:47:08.84 el47HiNu0.net
Drワトソンって解雇されてたのか。
694:デフォルトの名無しさん
22/01/16 21:01:51.64 uYZKVP770.net
メモリダンプを見ると
変数とかスタックとの内容がじかにわかるので
デバグの助けになるかもしれない
そこまで必要になることは珍しいけど
695:デフォルトの名無しさん
22/01/16 21:18:19.12 VfeV/Qg80.net
>>677
ダンプ解析入門 - Visual Studioでの可視化によるC#トラブルシューティング - Grani Engineering Blog
の説明読むとどういうことがわかるかわかります
696:デフォルトの名無しさん
22/01/16 21:38:53.48 zIpkfF6j0.net
>ダンプ解析入門 - Visual Studioでの可視化によるC#トラブルシューティング
読んでみたけど支離滅裂な記事だった
でもメモリダンプ吐くよう設定する方法はちゃんと書いてたぞ
697:デフォルトの名無しさん
22/01/16 21:40:20.63 P0LzLgpAM.net
>>683
出世して Watson Server として MS で働いてます
698:デフォルトの名無しさん
22/01/16 21:42:20.27 VfeV/Qg80.net
URLリンク(docs.microsoft.com)
ここ読むと環境変数だけでいけそうだができませんです
699:デフォルトの名無しさん
22/01/16 22:06:33.35 aMgjkUSV0.net
C#でメモリダンプが必要って、C#の利点捨てまくったクセの強い作りしてるんちゃうか
UnsafeゴリゴリとかそれC#で作る意味あるのっていう
700:デフォルトの名無しさん
22/01/16 22:08:28.63 8g0F/aL60.net
>>686
書くやつも書くやつなら読むやつも読むやつってことだな
701:デフォルトの名無しさん
22/01/16 22:17:34.06 8g0F/aL60.net
まあ、そんなもん調べても結局使ってるライブラリがタコでしたなんて可能性もあるし
それより先にやることあんじゃねーの?
的な
702:デフォルトの名無しさん
22/01/16 22:20:42.02 VfeV/Qg80.net
長時間連続運転するプログラムなんだけど、ちょっとずつメモリ使用料が増えていくななんて
時はメモリダンプ一択だと思うんだが・・・
というかID:8g0F/aL60さんはC#のメモリダンプ何回くらい使った経験あるの?
ゴミクズのような経験から導かれた結論は、やっぱりゴ
703:デフォルトの名無しさん
22/01/16 22:24:55.74 el47HiNu0.net
例外機構が当たり前になった今ではアプリ内でcatchするだけですからね。
仮にテストですり抜けてもcatchしたらエラーログに吐けよと。
今ではWinDbgでカーネルダンプ解析するぐらいかな。
704:デフォルトの名無しさん
22/01/16 22:27:14.39 el47HiNu0.net
C#はガベコレあるからメモリリーク気にしないでいいって後輩が言ってました!!!
705:デフォルトの名無しさん
22/01/16 22:41:54.12 RG8YDX1E0.net
少しずつメモリ使用料が増えていくとか、
Ruby みたいに、世代別GC を使っていたら、
古世代は閾値を越えるまで実行されないかも知れないし、
さらに、メモリ領域が大きいと、閾値もかなり大きいだろうし、なかなか実行されない
706:デフォルトの名無しさん
22/01/16 23:17:44.09 8g0F/aL60.net
>>692
正直ないね
無駄だから
c#でリークの対応なんて無駄
精々頑張った挙げ句にウチの会社が組んだところじゃない箇所でリークしてて対応できません
みたいな事実がわかるだけ
まず、c#みたいな
厳密なメモリ管理ができない言語での
組み方を学ぶべき
3日に一度再起動するとか
機能毎にモジュール化して動かすたびに破棄するとかな
廃棄したらガベコレ適当に実行してりゃOSが片付けてくれるだろ
707:デフォルトの名無しさん
22/01/16 23:31:50.74 I0k7QK8La.net
何のお役にも立てんけど、「メモリ使用料」って結構じわるねwww
まあマネージドなユーザーコードでリークが発生する原因は限られてるし、
ユーザーコードじゃないならどうしようもないし、ブル中野みたいな大鉈振るう必要って
確かにあるのかなという気はする
708:デフォルトの名無しさん
22/01/16 23:40:43.96 zIpkfF6j0.net
>>692
メモリ使用量が増えるならまずはプロファイラーじゃないか?
709:デフォルトの名無しさん
22/01/16 23:42:20.42 zIpkfF6j0.net
C#でも断続的に性能が極端に悪化する問題みたいなのが発生したときに
性能悪化したタイミングでダンプ吐かせると糸口がつかめたりする
そういうのはだいたい.NET Frameworkとか下位の部分が原因だけど
原因が明確になれば回避策が取れる
710:デフォルトの名無しさん
22/01/16 23:44:56.33 8g0F/aL60.net
>>699
それもうガチでわかんねーときの最後の手段で
まずはデバッガで見てみるべきじゃね?
最近は結構いい機能が付いてる
VC6の時代とは違う
711:デフォルトの名無しさん
22/01/17 00:12:14.01 BWxacq0R0.net
C#でのリークは大抵長寿命のeventに+=してるだけでしょ
712:デフォルトの名無しさん
22/01/17 07:41:52.27 MbNkwuBfa.net
GDIなどのシステムリソースの解放忘れとか
713:デフォルトの名無しさん
22/01/17 09:30:07.53 9uEhEVX70.net
リリースの特殊な(?)解放方法なんて半ば作ったやつの趣味だからな
可能であれば別モジュールにしてキックして終わりがいい
個人製作的な(会社内であっても)ライブラリだとusingのdispose実装忘れはよくある
信じて使うと後ろからバッサリだ
714:デフォルトの名無しさん
22/01/17 10:45:22.36 TWhgTM4G0.net
もう半年以上起動しぱなっしの.NET5で作ったスクレイピンクツールあるけど25mbで安定してるな
715:デフォルトの名無しさん
22/01/17 12:44:47.10 DKJy6PH50.net
>>704
25ミリバールって気圧かよw
716:デフォルトの名無しさん
22/01/17 13:14:05.94 U4Fph
717:VWG0.net
718:デフォルトの名無しさん
22/01/17 13:15:12.00 XdTy16+8M.net
ミリバールって昭和かよ
719:デフォルトの名無しさん
22/01/17 13:45:40.07 McAG9Ljja.net
マネージドな世界で閉じている限り、Disposeの実装ミスや呼び出しの忘れは
リークの原因には普通はならないと思うけどね。
単にリソースの解放が逐次的でなくなるだけ。
720:デフォルトの名無しさん
22/01/17 13:52:14.45 NIAK/ICvM.net
>>708
Disposeが呼ばれたらstaticなイベントからハンドラを削除するような実装は低品質なライブラリなんかだとたまに見かける
721:デフォルトの名無しさん
22/01/17 14:02:14.57 s/zLKX0LM.net
>>708
> GDIなどのシステムリソースの解放忘れとか
の話の流れで
> マネージドな世界で閉じている限り
とか頭おかしいのか?
722:デフォルトの名無しさん
22/01/17 14:05:18.68 McAG9Ljja.net
>>710
頭がおかしいのは君の方
普通のプログラマはマネージドなライブラリを挟んで
間接的にGDIのリソースを利用するんであって直接使ったりしないの
だからライブラリのコードにバグがない限りGDIを間接的に
利用しているからといってリークの原因にはならないんだよ
723:デフォルトの名無しさん
22/01/17 14:10:54.78 McAG9Ljja.net
ついでに言えば、俺は別に>>702に反論したわけじゃないw
すごい被害妄想だよねw
ネトウヨさんじゃねえのw
724:デフォルトの名無しさん
22/01/17 14:26:56.43 ly062VWjM.net
普通のプログラマw
無能の言い訳に多用されてて笑う
725:デフォルトの名無しさん
22/01/17 14:40:41.16 IUPVmsWca.net
理想のマネージドだったらdisposeなんて関係ないし、メモリリークなんて起きない
でもc#は理想のマネージドじゃないんだよ・・・
726:デフォルトの名無しさん
22/01/17 15:20:30.64 C2NpqJUJM.net
ゲロみたいな話題で盛り上がってんなあ
727:デフォルトの名無しさん
22/01/17 17:33:38.89 0pf4TYua0.net
っぱRustよ
728:デフォルトの名無しさん
22/01/17 19:32:54.18 rqpdgGXW0.net
mb ミリビットもジワるwww
729:デフォルトの名無しさん
22/01/18 09:23:03.79 HVobsaMl0.net
低レベルな質問で恐縮です。VisualStudioを使っています。
やりたいことは、定期的に更新されるcsvからデータを取得しDataGridViewに表示させたいです。
(つまり、DataGridViewでリアルタイムに更新されているように見せたい)
取得・更新することはできたのですが、更新時にソート状態が解除されて困っています。
DataTable・DataSet・DataSource・データバインドなどのキーワードを見つけて調べているのですが、理解力が乏しく解決できていません。
こんな方法があるよと、ヒントになる助言をいただけたらありがたいです。
よろしくお願いします。
730:デフォルトの名無しさん
22/01/18 10:13:54.13 Tap2eyJjM.net
>>718
DataGridViewのSort順を復元するだけでは?
731:デフォルトの名無しさん
22/01/18 10:18:04.98 jhcMMPao0.net
・DataGridViewにどうデータをセットしているか、どう更新しているか
・どうソートさせているか
・ソート状態が解除というのは結局どういう状況になっているのか
を具体的に
732:デフォルトの名無しさん
22/01/18 11:36:28.39 HVobsaMl0.net
反応ありがとうございます。
>>719
更新前にソートされている列を取得して、更新後に強制ソートする
という感じですね。試してみます。
>>720
>DataGridViewにどうデータをセットしているか
今の状態は、あるサイトにのっていたコードをコピペして試しています。
//フォームデザイン
//csvデータ:person_read.csv
//button4のソース
ソースコードはこちら URLリンク(dotnetfiddle.net)
///////////////////////////////////
733:デフォルトの名無しさん
22/01/18 11:37:01.32 HVobsaMl0.net
>・どう更新しているか
button4を押すたびにcsvからデータを更新しています(実現したらtimerで自動更新に変更予定)
>・どうソートさせているか
>・ソート状態が解除というのは結局どういう状況になっているのか
button4クリック→初期状態(csv並び順)
GUIのdataGridViewの任意の列(�
734:痰ヲば年齢)をクリックしソート 1,山田,25 3,鈴木,28 2,佐藤,30 4,山田,46 csvに 5,田中,37 が追加される button4クリックで更新 csvの並びに戻る(希望はこの順で表示させたい) 1,山田,25 → (1,山田,25) 2,佐藤,30 → (3,鈴木,28) 3,鈴木,28 → (2,佐藤,30) 4,山田,46 → (5,田中,37) 5,田中,37 → (4,山田,46) 以上です。
735:デフォルトの名無しさん
22/01/18 11:43:01.00 HVobsaMl0.net
リンクが404になっていたので貼り直しします。
これで大丈夫か心配ですが。
URLリンク(dotnetfiddle.net)
736:デフォルトの名無しさん
22/01/18 13:08:53.17 jhcMMPao0.net
DataTableの場合ソート順は
dataTable.DefaultView.Sort
に文字列で格納されるからこれを使えばいい
737:デフォルトの名無しさん
22/01/18 13:20:14.01 k1mhP8XB0.net
C#で正規表現のperlでの「tr」と同じ事をしたいのですが、
Regexクラスにそれっぽいのがありません。
何か方法はありませんでしょうか?
738:デフォルトの名無しさん
22/01/18 13:29:49.03 pQS/rHaxa.net
trは置換なのか?だったらc# regex 置換とかでぐぐりゃ方法出るだろ
痴漢じゃないなら知らない
739:デフォルトの名無しさん
22/01/18 13:41:14.96 k1mhP8XB0.net
置換ではあるのですが、
pattern [a-z]
replacement [a-z]
とすると半角英字が全角英字に変換されるといった感じです
740:デフォルトの名無しさん
22/01/18 13:52:43.16 pQS/rHaxa.net
正規表現でマッチした位置とマッチした文字列を取り出すのはできる
正規表現関係なく文字列を全部変換するってならできる
これを組み合わせて自分でやるしかないんじゃない?
741:デフォルトの名無しさん
22/01/18 13:54:14.42 9szJ9jA+0.net
Regex.Replace(mojiretsu, "[a-zA-Z]", p => ((char)(p.Value[0] - 'a' + 'a')).ToString());
動確はしてない。
742:デフォルトの名無しさん
22/01/18 14:04:35.01 k1mhP8XB0.net
なるほど、やはりないですか
ありがとうございました
743:デフォルトの名無しさん
22/01/18 18:17:30.27 UqX3jEvG0.net
全角半角ならVB.NetのStrConv使えばいいじゃね
744:デフォルトの名無しさん
22/01/18 18:27:21.22 80llBYJsr.net
c#って全角半角変換でまともなメソッド用意してないよな
745:デフォルトの名無しさん
22/01/18 18:49:27.58 HVobsaMl0.net
>>718です。
.SortedColumn で現在のソート選択列を取得
ListSortDirection で昇順・降順の状態を取得
データ更新後、.Sort で更新前のソート状態を復元することができました。
>>719さん>>724さんヒントをありがとうございます。
>>720さん、気にかけていただいてありがとうございます。
また何かあればよろしくお願いします。
746:デフォルトの名無しさん
22/01/18 19:17:27.38 DZmAMHWt0.net
>>732
C#の言語仕様にそんなのあるわけないだろうが
頭がおかしいのかな?
747:デフォルトの名無しさん
22/01/18 19:30:02.02 uGAsykz90.net
.NETのことだろ。
あれ本当に不便。
748:デフォルトの名無しさん
22/01/18 19:44:39.78 g9d5Z42+a.net
全角無視した比較はあるんだから変換もあればいいのにな
.net6はいたるとこでCultureInfo受け取れるようになってるから、オリジナルCultureInfo作ってやればtolowerなんかはできそう
749:デフォルトの名無しさん
22/01/19 04:15:15.58 4BL/bkWB0.net
nuget辺りに.net言語で使える漢字処理モジュールみたいのないの
750:デフォルトの名無しさん
22/01/19 13:57:55.37 b1tRS/0c0.net
あの、Asp.netMVCでサイトを作ったんですが、
robots.txtって
Global.asaxと同じ場所もしくはViews\Layout.cshtmlと同じ場所
のどっちに置けばいいんでしょうか?
751:デフォルトの名無しさん
22/01/19 22:04:21.46 67zDZ4RH0.net
WebProgという板があるからそっち言ってみれば?
752:デフォルトの名無しさん
22/01/20 08:59:26.49 fgAfnzipM.net
>>738
デプロイしてみればわかる話を
753:、何故聞いてしまうのか?
754:デフォルトの名無しさん
22/01/20 10:11:03.18 8HL1zORE0.net
めんどいじゃん
ネットでクダ巻いてるゴミが代わりに試して教えてくれれば儲けもんだろう?
755:デフォルトの名無しさん
22/01/20 12:57:10.80 MJ6I7RR7r.net
おっ、そうだな
756:デフォルトの名無しさん
22/01/20 14:46:47.86 n7chvAG30.net
>>741
うそを教えられるという可能性は考えないのか?
757:デフォルトの名無しさん
22/01/20 18:34:05.33 NL1fx3HA0.net
すでにサイト作ってる段階なら、掲示板で聞くより自分で試すほうが早いと思うんだがなぁ
758:デフォルトの名無しさん
22/01/21 00:57:35.59 yyC8EMRk0.net
共変と反変という言葉がよく分かりません
アップキャスト/ダウンキャストと何が違うんでしょうか?
759:デフォルトの名無しさん
22/01/21 02:01:57.32 r2dC59Vr0.net
class B{}
class C:B{}
class D:C{}
static D Function(B b){ return new D();}
Func<C,C> fp = Function;
Functionの返り値DはCの派生クラスだから返り値CのFunc扱いしても大丈夫だよねってのが共変
Functionの引数BはCのベースクラスだから引数CのFunc扱いしても大丈夫だよねってのが反変
両方ともアップキャスト(asがいらない)が約束されてるから許される
760:デフォルトの名無しさん
22/01/21 04:17:33.74 9FYmM/Q0a.net
ハロウィンの子供にチョコレートを渡せることが反変で
チョコレート工場をお菓子工場とみなせることが共変ってことか
761:デフォルトの名無しさん
22/01/21 08:32:03.92 kufT2hajr.net
よく理解できるね
これを理解したとしても他人がコードを読むの大変だよね
コメントに書いておくものなの?
762:デフォルトの名無しさん
22/01/21 10:57:27.37 r8LIAXWEM.net
c#自体にそういう機能があるので楽だねって感じ
うまくいかない場合は何か思い違いしてる
763:デフォルトの名無しさん
22/01/21 22:48:46.71 0wwLw+zrM.net
>>746-747
めちゃくちゃ分かりやすいです
ありがとうございました
764:デフォルトの名無しさん
22/01/21 22:52:58.30 DQ1OUxKV0.net
なにこれ
もしかしてnullになるかもしれんやつは片っ端から?つけなきゃいけなくなったの??
765:デフォルトの名無しさん
22/01/21 23:17:35.13 Yoc43dCB0.net
そうだぞ
766:デフォルトの名無しさん
22/01/21 23:37:35.61 DQ1OUxKV0.net
なんか俺かっぺになった気分だべ・・・
767:デフォルトの名無しさん
22/01/22 01:35:08.87 xgyvtLBZ0.net
nullチェックをコンパイラが管理するやつだから慣れれば神機能
768:デフォルトの名無しさん
22/01/22 06:49:46.16 sQZaaq50M.net
参照前に必ずnullチェックというコーディング規約から解放される?
769:デフォルトの名無しさん
22/01/22 07:48:24.01 dpfIrrzB0.net
なわきゃあない
770:デフォルトの名無しさん
22/01/22 08:36:39.06 odBVOzqN0.net
on/offを行単位で切り替えられるから混乱すると思う
771:デフォルトの名無しさん
22/01/22 09:30:40.13 AMYiKIMXM.net
行単位でそんな事する奴はすでに混乱してるだろw
772:デフォルトの名無しさん
22/01/22 09:57:57.24 dGbyTm5r0.net
何が利点なんだろうネ?(笑)
773:デフォルトの名無しさん
22/01/22 10:16:46.92 z2LDxi9+M.net
まあ利点がわからないなら君は今のままでいいんじゃね?
774:デフォルトの名無しさん
22/01/22 10:35:14.93 tP9M/cw30.net
5年ぶりに.Netで作ることになったんだけど、.Net Frameworkってオワコンなの?
Coreとか出てきてさらに.Netに統合されるとか混沌としてて何が今の最適解なのか解らない。
どうせ作るなら今の最適で作りたいからお聞かせ願いたい。
つかWPFって普及前に死んだ感じ?
775:デフォルトの名無しさん
22/01/22 10:40:46.17 om6KWGu40.net
.NET FrameworkはオワコンだけどWindowsに標準で入ってるのでWindowsユーザー視点だと一番有難い
WPFもWinFormsのWindowsであれば現役
776:デフォルトの名無しさん
22/01/22 11:13:26.21 dGbyTm5r0.net
.netもオワコンだが
WPFもオワコンなので
代わりがない状態
他のはもっと過疎ってて
.netやWPFより更に消えやすい感じ
なので何もオススメできない状態
777:デフォルトの名無しさん
22/01/22 11:41:22.99 cBfIrJY2a.net
オワコンっても単なる流行の話だからな中身はオワコンでもない
.NET Framework 4.8
.NET6
今選ぶならこのどちらか。どっちも長期サポートになってるはず
表面的にはどっち選んでも同じ。昔の記憶が残ってるなら4.8使った方がスムーズに扱える
UIは色々増えてるけどwinだけならWinFormsが無難
778:デフォルトの名無しさん
22/01/22 11:45:58.45 tP9M/cw30.net
>なので何もオススメできない状態
調べる限り、今はコレってのが無いんだよね。
WPFも生き腐れしてるみたいなので、
無難なWindowFormsと.Net Framework4.6.Xで良いやって思ってます。
ぬるぬるUIによる快感性はiOSに任せようと。
779:デフォルトの名無しさん
22/01/22 11:49:15.98 tP9M/cw30.net
>.NET Framework 4.8
ユーザーのコンピュータには.NET Framework 4.6が入ってるので
5年程度を稼働を目安にすると.NET Framework 4.6のが導入のハードルが
低くて良いなと思うのですが、.NET Framework 4.8のが何か優れてるんですかね?
純粋にサポートの長さかな。
780:デフォルトの名無しさん
22/01/22 12:08:19.50 cBfIrJY2a.net
4.6だと今年でサポート終了かな
サポート気にしないなら・・4.xの差で機能的にはほとんど変わってないから何使っても同じ
ただちょこちょこソースコードの書き方が追加されてる(変更じゃなくて追加だから昔の書き方で問題起きない)
ぐぐってソースコードコピペしたときに新しい書式のソースコードだと思わぬエラーがでて困るかもしれないって程度
わざわざ古いの選ぶ意味もないけど、新しいの入れるのが面倒なら古いままでもいいんじゃないって程度だよ
781:デフォルトの名無しさん
22/01/22 12:11:29.47 63g4vstfM.net
基本的には.NET6を選べばいい
既存システムのメンテナンス・マイグレーションなら資産状況次第だけどFW48の方が低リスクで間違いない
ランタイムのサポート期間は意外にもFW48の方が長い
でも開発環境のサポート期間はわからない
782:デフォルトの名無しさん
22/01/22 13:06:27.03 MOxbGC/+0.net
最近は4Kとか高解像度ディスプレイ対応(スケーリング対応)が必要になって来たせいか
WPFを使ってる所が前よりは増えた印象
他に良いのが無いから消去法で採用って感じ何だろうけど
783:デフォルトの名無しさん
22/01/22 13:10:19.88 MOxbGC/+0.net
>>766
スケーリング対応は4.8の方が改良されてる
もっと言えば.NET6の方が進んでるけど
784:デフォルトの名無しさん
22/01/22 13:16:37.15 +eWEN8w/0.net
WPFでもMVVMを考えなくてもWinFormsと同じように使えるし、スケーリング対応が楽なのはいいよね
あと最近のWindows10は標準で4.8が入ってなかったっけ?
785:デフォルトの名無しさん
22/01/22 13:25:41.09 i+EsaIAtd.net
サポート期間を気にするなら.NET6は問題外だよ
なんと2024年にサポート切れ
786:デフォルトの名無しさん
22/01/22 13:36:54.52 63g4vstfM.net
十分だよ
.NETは互換性が高いから.NET8への移行も苦労はせんだろう
他の言語と比べたら天国だ
787:デフォルトの名無しさん
22/01/22 14:04:30.15 MOxbGC/+0.net
>>771
WinFormsの*.Designer.csと*.resxから解放されるのも大きいね
差分を見たりマージするのに問題あり過ぎた
Windows10はMay 2019 Update(1903)から標準で4.8が入ってる
現在サポート中のバージョンは全部4.8が入ってるね
788:デフォルトの名無しさん
22/01/22 14:08:40.62 gJEoCqwv0.net
今の最適で作りたいなら.NET 6/WPFだな
789:デフォルトの名無しさん
22/01/22 14:33:41.83 KL4k8E210.net
.NET Frameworkは最終版の4.8でもC#7.3までの対応
C#8.0は.NET Core 3
C#9.0は.NET 5
C#10.0は.NET 6
C#のバージョンを上げるなら.NETも移行せざるを得ない
790:デフォルトの名無しさん
22/01/22 14:35:53.77 nTnTl9DUr.net
わかりました、Mauiで頑張る
791:デフォルトの名無しさん
22/01/22 14:44:13.78 Ii2fD9R0a.net
WPFの方が高DPI(高「解像度」では必ずしもないよね)対応が優れているっていうのは
DPIが異なる複数のディスプレイ間をウィンドウが行ったり来たりするような状況を想定した話?
792:デフォルトの名無しさん
22/01/22 14:49:58.72 ARjVXSY1M.net
WPFってWebみたいに解像度に合わせて画像切り替えるとか標準じゃできないだろ?
HDPI対応が優れているとか片腹痛い
793:デフォルトの名無しさん
22/01/22 15:19:51.12 EyuzyEvM0.net
俺社環だと2012R2なんで4.5.1なんだよな
サポート外だからさっさと4.6移行に切り替えたいけど、不具合出てないから誰もやりたくないという
794:デフォルトの名無しさん
22/01/22 16:54:28.58 1FaTcT0G0.net
>>779
そんなもん解像度は取得できるしなんとでもやりようあるやろ
つうデスクトップGUIアプリに求めることかそれ?
どんなシチュエーションで必要なのかわからん
795:デフォルトの名無しさん
22/01/22 18:01:32.84 dpfIrrzB0.net
想像力が無いだけだなあ
796:デフォルトの名無しさん
22/01/22 18:55:07.04 Hnp3kh2k0.net
>>780
誰もやりたがらないけど、OS のサポート切れが迫ってきて対応中。w
いまさらその上で動いてるオレ様ソフトのインストールの手順とか覚えてないんだけどなあ。
797:デフォルトの名無しさん
22/01/22 19:41:02.79 DSkywrpw0.net
ドキュメントは残しておけよw
798:デフォルトの名無しさん
22/01/22 19:49:34.26 vcUHcBQYM.net
昔自分用に作った(家で自分の時間を使って)アプリがあって退職時に無理やり引き継ぎさせられて勝手に使われてる
PC壊れたときに連絡あってアプリを送った思い出…
799:デフォルトの名無しさん
22/01/22 19:51:39.05 vcUHcBQYM.net
毎日使うものなので劇的に工数が減った
あくまでも自分用
それを恨みこそすれ感謝してない元会社がタダでずっと使ってる
800:デフォルトの名無しさん
22/01/22 21:17:29.45 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:デフォルトの名無しさん
22/01/22 21:22:02.32 vcUHcBQYM.net
return Num + p;
これは足したものを返してるだけで
Num自体に変更をかけていないからな
Num = Num + p;
return Num;
ならわかる
802:デフォルトの名無しさん
22/01/22 21:37:34.36 9EvEVFCn0.net
あ、、、確かに。納得しました。
ありがとうございました
803:デフォルトの名無しさん
22/01/22 23:20:32.09 mmM8IstB0.net
いえいえ
804:デフォルトの名無しさん
22/01/23 14:44:30.58 is+XSiL/0.net
すみません、初心者で何からしたら良いのか、何をすべきなのか分からなくて助けてください。
計算アプリを作らなければならず、調べてなんとかボタン配置とかはできたのですが、プログラミングが何をどういった順番でするのか分からなくて…
計算は
固定数字÷ボタン入力した数字(+必要に応じて選択した数字)×ドロップダウンで選択した数字
これを出来るようにしたいのですが、やるべきことは
①ボタンとドロップダウンの紐付け?認識?
②入力した数字の表示
③()の条件付け
④計算結果の表示
これで大丈夫でしょうか?
うまく質問できず、申し訳ありません。
今までプログラミングに触れたことが無く、必要情報が不足していましたら追加致します。
805:デフォルトの名無しさん
22/01/23 15:13:55.20 XkFSmW1wd.net
今期の単位は諦めましょう
806:デフォルトの名無しさん
22/01/23 15:15:05.76 Wu5qqWWYa.net
ボタン押したらボタンに対応した値を表示する(固定値で割らなくておk)
それができたら、次は固定値で割った結果を表示するように修正
それができたら、次はドロップダウンの選択が変わったことを知る方法と選択された値を取得する方法調べる
それがわかったら、ドロップダウンの値を掛けた結果を表示できるように修正
それができたら、どんな条件でこういう計算するって条件別け
かな?
807:デフォルトの名無しさん
22/01/23 15:16:44.75 CCpFlBt8M.net
それを決めたら他の人がコードを書いてくれるのか?
それならマルナゲをオススメ
808:デフォルトの名無しさん
22/01/23 15:20:46.99 is+XSiL/0.net
>>793
ありがとうございます!
直ぐにやってみます。
やるべきことを分かりやすく教えて頂き、本当にありがとうございます。
809:デフォルトの名無しさん
22/01/23 15:30:22.12 is+XSiL/0.net
>>794
いえ、コードも私が書かなければなりません。
丸投げする相手が居ないです…
810:デフォルトの名無しさん
22/01/23 19:04:59.40 nwzKJ0xW0.net
ひっでえ課題
そんなもんが何の足しになるんや
811:デフォルトの名無しさん
22/01/23 19:47:07.31 is+XSiL/0.net
やっと、数字の表示ができました……
何故か一桁しか表示されなくて、次の数字押したら上書きされるけど、表示はできました…
何のたしになるかは分からないです…
曰く『コロナ禍だけど、この機会に家で出来きることをしよう!』って事らしいです。
812:デフォルトの名無しさん
22/01/23 19:48:24.39 is+XSiL/0.net
投稿が重複してしまいました、誠に申し訳ありません。
813:デフォルトの名無しさん
22/01/23 23:26:33.12 pR5ferbX0.net
メンバー'hoge' はインスタンスデータにアクセスしないため、static にマークできます
814:デフォルトの名無しさん
22/01/24 12:21:02.64 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:デフォルトの名無しさん
22/01/24 12:39:27.95 zeqExr0Ka.net
g.DrawRectangle(pen, 16, 16, 1, 1);
g.DrawRectangle(pen, 16, 16, 0, 0);
こいつらはどういう挙動をするべきかを考えたら?
816:デフォルトの名無しさん
22/01/24 13:27:00.02 VRumLvNTM.net
GDIは終点は描画領域に「含まない」
だから、幅として成立する。
FORTRAN由来とかで「含む」系
もあるので注意だ
817:デフォルトの名無しさん
22/01/24 14:09:38.84 97kNTb42a.net
>>801
まあこうは言える。
まずユークリッド幾何学的な数学的に抽象化された世界で考えるべき。
その世界では、1対の平行線の距離がペンの幅より大きければ必ず平行線の間に「隙間」が出来る。
GDI+の描画はこういう抽象化された世界をピクセルの世界に写像してるだけ
818:デフォルトの名無しさん
22/01/24 18:54:49.46 97kNTb42a.net
まあたぶんこんな感じだね
(1) 論理座標の原点は(0, 0)のピクセルの中心に設定されている。つまり論理座標とピクセル座標は
0.5ずれている(少なくともペンの幅が奇数ピクセルの時は)
(2) DrawRectangleは論理的な矩形の辺がペンの中心になるように描画する
(3) だから描画された矩形はペンの幅の1/2 * 2だけ指定したサイズより大きくなる
819:デフォルトの名無しさん
22/01/24 19:46:14.25 ph7NlGryd.net
小数のない世界なら厚みゼロで隙間がないんだろうけど、塗りつぶすならFillRectngleで明示しろってことかな。
820:デフォルトの名無しさん
22/01/25 22:02:24.84 AwkrZJuk0.net
独習C#やってるんだけど、これを一通りやれば基本は身に付くと思っていい?
821:デフォルトの名無しさん
22/01/25 22:03:27.85 3T3OgJ8A0.net
信じるしかないだろ。もう買ってしまったのだから。
822:デフォルトの名無しさん
22/01/25 22:23:59.29 bPaq+vdr0.net
>>807
その本なら自信持って良いよ。
record, using var, initなどのC#8以降の機能は別途学習が必要。
LINQや正規表現などは実践でないとなかなか身につかないので、だいたい理解したらどんどん読み進めるのがおすすめ。
ちなみにプログラミング未経験で、全部読むのに3ヶ月かかりました。
823:デフォルトの名無しさん
22/01/26 00:57:13.82 TS8Lm52TM.net
自分だったら3か月かかるならモチベーションが保てそうにないなw
20年前はそんな本がなく手探りだったけど逆に良かったのかな…
824:デフォルトの名無しさん
22/01/26 01:14:23.92 TS8Lm52TM.net
仕様もライブラリも今よりペラペラだったから入門しやすかった
825:デフォルトの名無しさん
22/01/26 01:55:09.45 4qIztPSU0.net
>>809
ありがとう
プログラミング経験はエクセルVBAのみ
C#は簡単な方だと聞いてたけど難しいね、頑張ります
826:デフォルトの名無しさん
22/01/26 12:37:45.33 IaxANYMEd.net
やっつけ仕事するだけなら今も昔も変わらんと思う
C#の便利機能が山ほど増えてて書きやすくはなってるけどどこまでが入門なのかは正直わからん
827:デフォルトの名無しさん
22/01/26 13:20:24.56 S6jLK41vM.net
Recordとかぜってえ使わねえ
828:デフォルトの名無しさん
22/01/26 13:32:46.48 MBxJE5i40.net
ともーじゃん?
・・・まあ使わなくても済むよなあ
829:デフォルトの名無しさん
22/01/26 13:50:18.74 wOQPCoOZM.net
DTOだらけの低品質なコードが量産されてTypeScriptみたいになりそうな気はしてる
830:デフォルトの名無しさん
22/01/26 14:28:40.80 pfxZ0tMsd.net
おれも独習で勉強した
分厚いから真ん中ぐらいまでくると最初の方忘れてるわ
んでもう一度戻ってやり直したり、途中で挫折したりで
1年以上うだうだ読んでた
読み終わる前にいろいろ作って遊んでたけど
イベントとか非同期処理とか分からないとまともなの作れないんで
途中すっ飛ばしてその辺読んだり
831:デフォルトの名無しさん
22/01/26 19:22:56.75 uxP3YVvMH.net
>>817
その独習、旧版(ハーバード・シルト)?
832:デフォルトの名無しさん
22/01/26 19:59:28.45 zF2HduXmM.net
シルトは過去の人
昔読んだ時もそういうイメージ
文法ぐらいが得意分野
833:デフォルトの名無しさん
22/01/26 21:16:01.91 uxP3YVvMH.net
>>819
では最近の教科書で優れたものは、どなたの著作ですか?
834:デフォルトの名無しさん
22/01/27 00:27:57.09 XnQeNwtl0.net
俺はオライリーの薄いやつで大体把握して、デザパタをjavaの結城さんのやつで学んだな
835:デフォルトの名無しさん
22/01/27 10:26:45.87 i4V+v3ft0.net
C++の本で勉強した知識だけでC#の本は買わず、dobonを見ながら書いてる
836:デフォルトの名無しさん
22/01/28 00:37:45.37 UrWQ/KNN0.net
dobonよく参考にしてるけどもしかして見てるとバカにされる風潮とかあるの?
837:デフォルトの名無しさん
22/01/28 00:43:53.93 OmkEpZCo0.net
昔はよくお世話になったけど、今となっては古い記事が多いので最近はあまり見ないな
838:デフォルトの名無しさん
22/01/28 05:13:54.08 AmULl7RP0.net
全ページのヘッダに古い言語仕様の内容であることの明示くらいはしてほしい
あと初心者向けと言いながら
同じ処理でベストプラクティスと非推奨な書き方を同列に載せてるのも印象よくない
839:デフォルトの名無しさん
22/01/28 08:13:42.95 MUNMfoCeM.net
recordはvalueobject作るのに便利
使い捨てのアプリ作るのには不要
840:デフォルトの名無しさん
22/01/28 12:18:41.61 g6bFcMDaM.net
で、あるか
841:デフォルトの名無しさん
22/01/28 14:24:04.65 C+lFkEfx0.net
お世話になります。
ComboBox.IsReadOnly を使おうとしてエラー(usingまたはアセンブリが不足)が出ました。
URLリンク(docs.microsoft.com)
で調べ、
名前空間:System.Windows.Controls
アセンブリ:PresentationFramework.dll
を追加しました。
しかし、現時点でエラーに変化がなく困っています。他に考えられる原因があればお教えてください。
842:デフォルトの名無しさん
22/01/28 14:32:54.24 QwC8uFzi0.net
「他」とか言われてもお前以外にゃわからんのよ
843:デフォルトの名無しさん
22/01/28 14:38:21.72 S6VsJW6p0.net
>>828
追加したのはWPF用のアセンブリだけどお前が作ってんのはWPFじゃなくてWinFormsだとか
844:デフォルトの名無しさん
22/01/28 15:20:17.24 D0DTDHxMd.net
ComboBoxのインスタンス作らずにプロパティ見ようとしてるとか?
プロジェクトのエラー起こしてるコードさえないからわからん
845:デフォルトの名無しさん
22/01/28 15:31:53.40 C+lFkEfx0.net
>>830
反応ありがとうございます。
はい。WinForms(VisualStudio使用)です。
ソリューションエクスプローラーの参照からアセンブリを探して追加しました。
WPF用ではなかったか確認します。
using System.Windows.Controls と書いて追加した気になっていましたが、
ソリューションエクスプローラーに同名がないのを確認しました。これが原因かもしれないので調べてみます。
>>831
盲点でした。確かにインスタンス化していません。やってみます。
みなさんのアドバイスのおかげで糸口が見えました。あとは自力で頑張ってみます。
また困ったことがあればよろしくお願いします。
846:デフォルトの名無しさん
22/01/28 15:36:53.16 bcAzYVuU0.net
>>832
横からレスだけど、次からは情報を端折らずに書いてね
場合によるから
847:デフォルトの名無しさん
22/01/28 15:38:40.89 bcAzYVuU0.net
>>832 833の追記
WinFormsのComboBoxはSystem.Windows.Formsの方だったはず
848:デフォルトの名無しさん
22/01/28 15:51:48.62 C+lFkEfx0.net
>>832
反応ありがとうございます(横レスでも大歓迎です)
情報を端折ってしまったようで今後気を付けます。
必要になる正しい情報とはこちらでよろしいですか?
エラー CS1061 'ComboBox' に 'IsReadOnly' の定義が含まれておらず、型 'ComboBox' の最初の引数を受け付けるアクセス可能な拡張メソッド 'IsReadOnly' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください
それとも部分的であってもソースでしょうか?今回の問題では必要ないと判断してしまいましたが、次回以降気を付けます。
次回もぜひお願いします。ありがとうございました。
849:デフォルトの名無しさん
22/01/28 16:04:30.29 AFiLYmq20.net
単に、WinFormsのComboBoxにはIsReadOnlyプロパティが存在しないだけだな
URLリンク(atmarkit.itmedia.co.jp)
850:デフォルトの名無しさん
22/01/28 16:32:10.58 bcAzYVuU0.net
>>835
エラーメッセージもそうだけど、こっちが言ってたのは「WinFormsかWPFか」の方だね
WinFormsの方のComboBoxにはDropDownStyleプロパティがあるからこれにComboBoxStyle.DropDownListを渡せば選択可能で文字列入力を受け付けないタイプになるよ
(まあ、他の人がすでに提示しているようだけど)
851:デフォルトの名無しさん
22/01/28 16:34:15.50 ycXEhqEs0.net
もしかして Enabled
852:デフォルトの名無しさん
22/01/28 17:05:47.31 C+lFkEfx0.net
みなさん親切で涙が出てきます。
>>836・837・838 反応ありがとうございます。
・C#にはWinFormsの他にWPFがあったのですね。WPFという言語なのかと思っていました。
今後はエラーメッセージと共にWinFormsであることを最初に宣言します(初心者すぎてすみません)
IsReadOnlyプロパティが存在しない
・はい。通常のプロパティでは見つけられませんでした。
こちらのサイトを参考にさせてもらい挑戦していました。
URLリンク(blog.t5o.me)
・ComboBoxStyle.DropDownListとEnabledも試しに設定しました。
やりたいことは、
コンボボックス横にチェックボックスを設置
チェックボックスが真の時、コンボボックスを規定値にし操作不可能にすることですが、
上記設定でもドロップダウンボタンが反応するので別の方法を探し、上記サイトにたどり着きました。
・第2案として、チェックボックスが真の時、コンボリストを規定値以外を削除し対応しようかと考えています。
(ドロップダウンリストが空白で1行出てきてしまうのがかっこ悪いかなと考えて最善を探していました)
なんとか頑張ってみます。みなさんありがとうございました。
853:デフォルトの名無しさん
22/01/28 17:14:46.64 AFiLYmq20.net
>>839
System.Windows.Forms.ComboBoxを継承してカスタムコントロールを作るってのが調べると出てくると思うよ
例えばこんなのとか
URLリンク(jeanne.wankuma.com)
854:デフォルトの名無しさん
22/01/28 17:20:12.41 OmkEpZCo0.net
>>839
839のリンク先もそうだけど、記事にXAMLって単語があったらWinFormsと無関係だと思って良いよ
WinFormsのコンボボックスの操作不能にするのは、comboBox.Enabled = false;
855:デフォルトの名無しさん
22/01/28 19:13:46.87 l6dMzLky0.net
c# + visual studioでデータブレークポイント使えますか?
c#のクラスは参照型ですが、値のコピー
(int型変数i,jだと、i = jに相当する処理)
するにはどのようにすればよいのでしょうか?
856:デフォルトの名無しさん
22/01/28 19:27:11.67 LzvJDC40a.net
ブレークポイントの上で右クリ→条件
857:デフォルトの名無しさん
22/01/28 20:10:31.96 LzvJDC40a.net
コピーはコピー先をnewして作って、メンバー変数の値をそこに一個ずつコピーしてく
クラスによってはそういうnewとコピーをしてくれるClone()を持ってることもある
858:デフォルトの名無しさん
22/01/29 16:47:47.80 3whatsSd0.net
独習C#で学習されている方が多そうですがマルチスレッド難しすぎないですか(泣)
新版を使っておりますが、P530~の説明が意味不明です
awaitとWait()メソッドの違いがよくわかりません
どちらもタスク(サブスレッド)の処理を待機するという同じような意味という理解ですが、
なぜかサンプルプログラムで両方使われています
試しに片方削除して実行すると、ループが最後まで実行されないので、意味が違うんでしょうが調べてもよくわかりません…
どなたかご教示いただけないでしょうか
859:デフォルトの名無しさん
22/01/29 17:25:22.69 xNgrtKWR0.net
>>845
大別するならawaitは非同期、Task.Wait()は同期的、という所だけど
Task.Wait()は単純にその場でタスクの終了を待つので足踏みする事になる
awaitを使うと内部的にはその後のコードもTask化されてas
860:yncメソッドの返り値になる awaitまで到達した時点で呼び出し元に処理が戻るので、主にUIスレッド等でよく使われる 後続処理を追加するだけならTask.ContinueWith()も有るんだけど UIコンポーネントは作成スレッドからしかアクセスしてはならない制約とか 後続処理を担うスケジューラ指定とか煩雑なのを纏めて糖衣構文にしたのがawait
861:デフォルトの名無しさん
22/01/29 18:18:28.62 5CdUE0YMa.net
>>845
助手(他のスレッド)がタマネギを炒め終わるのをジャガイモの皮を剥きながら待つのがawait
手を止めてじっと待つのがWait
awaitが画期的なのは、「助手の仕事が完了するまでは別の仕事をしつつ、完了後に
やりかけの仕事の続きをする」という本来シーケンシャルでない手続きを、あたかも
「助手の仕事が完了したら続きをやる」という単純なシーケンスであるかのように記述できること
862:デフォルトの名無しさん
22/01/29 18:22:38.33 p/SD7W260.net
async汚染に注意な
863:デフォルトの名無しさん
22/01/29 18:50:59.09 wjo4lb340.net
awaitの正体は「Taskがすぐに終わらなかったらすぐにreturnする特殊構文」ってことを知っておけば理解はしやすいと思う
Taskが終わったらさっきawaitしたところから(途中処理を飛ばして)再開する
関数先頭に特殊構文を使うことを明記(async)しなきゃいけない
(FormとかWPFとかのGUIアプリなら裏で勝手にやってくれるから気にしなくていいが)
Taskが終わった後にawaitから再開できるように呼び出し元のスレッドでDispatcher.Run()しとかなきゃいけない
864:デフォルトの名無しさん
22/01/29 19:19:00.14 7kxnQq4mr.net
awaitは「あ!まって!」って覚えればいい
865:デフォルトの名無しさん
22/01/29 19:28:39.37 RKF0PElVM.net
await 〇〇やっといてよろしく。私いったん席外すんで終わったら連絡ちょうだい。続きこっちで引き継ぐから
Wait 〇〇やれや!終わるまで後ろでじっと見とるからな!はよせえよ!
どっちがいい?
866:デフォルトの名無しさん
22/01/29 19:41:45.39 S+vKlyc9a.net
Threadが一番わかりやすいw
867:デフォルトの名無しさん
22/01/29 20:51:42.02 kkw3q4n30.net
たとえが分かりやすいですw
イメージがわきました、みなさんありがとうございます!
もう一点だけ確認なのですが、asyncメソッドのawaitよりあとのプログラムに移るタイミングですが、
メインスレッドでプログラムが実行中のときはどちらが優先になるのでしょうか?
868:デフォルトの名無しさん
22/01/29 20:57:28.48 z01vGxpA0.net
>>853
OSの気分次第
869:デフォルトの名無しさん
22/01/29 21:26:41.18 qmqxr6WH0.net
WinFormという前提でいうと
まず前提としてメインスレッドではずっとメッセージループっていうループが回ってる
でマウスの入力とか再描画要求はメッセージって形でキューに貯められる
メッセージループはキューから1つメッセージを取り出してはアプリの実装に流してくる
ちなみにその辺のシステムメッセージはWinFormだとMouseMoveとかPaintとかのイベントとしてアプリが対応することになる
await以降の処理もこのメッセージを使って実現してるから
メインスレッドの手が空いて次のメッセージを処理できる態勢になるまで待たされる
870:デフォルトの名無しさん
22/01/29 22:02:51.88 p/SD7W260.net
スレッド
注意点一覧
・シングルコアで動くか?
・応答がないときに自決するか?
・失敗時のメモリリークはないか?
・タイムスケジュールはあるか?(例:1分の内AスレッドはX秒、BスレッドはY秒等)
・生存確認方法はあるか?
・実行中の状態は取得できるか?
・ログは出力できるか?
・最大使用メモリは把握できているか?
・失敗時のリザルトの受け取り方法は適切か?
・処理が複数失敗する可能性は考慮できているか?(例:ファイルオープン成功→ファイル書き込み失敗→ファイルクローズ失敗→tempフォルダ削除成功のとき何が返る?)
・本体終了時に終了できるか?
871:デフォルトの名無しさん
22/01/29 23:49:44.87 kkw3q4n30.net
ありがとうございました!
872:デフォルトの名無しさん
22/01/30 01:12:48.99 XLpABEj80.net
C#のマルチコアなんたらっていう非同期処理のテキスト読んだらいいよ
873:デフォルトの名無しさん
22/01/30 03:05:22.41 2zm6GvSaa.net
async/awaitとTask.Runの使い分けが今でもよくわからん。。
874:デフォルトの名無しさん
22/01/30 09:00:16.50 F79hzdqmr.net
>>856
それどこかに書いてあったな
5年くらい前の記憶でそのリストがあった
875:デフォルトの名無しさん
22/01/30 11:27:59.00 zEfMsuv9M.net
それ多分C#じゃなくて組み込みとかの話だから参考にならんよ
876:デフォルトの名無しさん
22/01/30 14:20:38.52 6d5Lec+00.net
>>861
え?どこにC#だと助かる要素があるの?
877:デフォルトの名無しさん
22/01/30 15:48:10.14 WELts56MM.net
>>856
この記事の内容が組み込みc++じゃないのかと
878:デフォルトの名無しさん
22/01/30 17:06:41.10 6d5Lec+00.net
C++だと駄目でC#だと助かる要素なんて1つもないけど
今まで何やってたん?
879:デフォルトの名無しさん
22/01/30 17:17:33.02 nTSKdiu90.net
>>856
これスレッドに限らずどのプログラムにも言えることだと思うわ
出典元知りたい
880:デフォルトの名無しさん
22/01/30 17:18:42.01 v/uLxU6j0.net
>>859
Task.Runとawaitは組み合わせて使うものだし、使い分けって何のことだろうか
(同期する必要が無ければawaitしないことはある)
881:デフォルトの名無しさん
22/01/30 17:21:16.29 cT0our3Wa.net
助かるってどっかの方言なのかな。まったく意味わからなかったw
ほぼすべてがc#(とVSの組み合わせ)で助かるか、マルチスレッド関係なくそのぐらい考えとけって項目
882:デフォルトの名無しさん
22/01/30 17:29:29.52 6d5Lec+00.net
>>867
は?c#に特別なギミックなんてないが
君はスレッド使わないほうがいいね
883:デフォルトの名無しさん
22/01/30 19:59:30.72 XMZDBma3d.net
またシングルスレッドおじさんの講釈が始まったのか
884:デフォルトの名無しさん
22/01/30 20:10:42.59 Mi/4eGx6M.net
awaitのおかげで非同期書きまくる現代のプログラミングでこんなチェックリストいちいち考えてたら工数足りん
それに現代の実行環境は優秀なんでほとんど考えなくていいよう出来てる
C#もJavaScriptもそう
C++とはもう時代が違う
・シングルコアで動くか?→普通に書けば当たり前に動く
・応答がないときに自決するか?→普通に書けばライブラリ側からタイムアウト例外出て落ちる
・失敗時のメモリリークはないか?→普通に書けばあり得ない
・タイムスケジュールはあるか?(例:1分の内AスレッドはX秒、BスレッドはY秒等)→大半のケースで環境に任せるのが正解。制御したいならより上のプロセスレベルで制御する
・生存確認方法はあるか?→死んだら例外でる出てないなら生きてる
・実行中の状態は取得できるか?→大半のケースで取得要件はない
・ログは出力できるか?→出来ないことなんてあるの?
・最大使用メモリは把握できているか?→環境に任せるのが正解。したいならより上のプロセスレベルで制御する
・失敗時のリザルトの受け取り方法は適切か?→例外で標準化されてる
・処理が複数失敗する可能性は考慮できているか?(例:ファイルオープン成功→ファイル書き込み失敗→ファイルクローズ失敗→tempフォルダ削除成功のとき何が返る?)→例外出たら止めろ。例外出ても進めるならしっかり設計しろ。そしてそれは非同期関係ない
・本体終了時に終了できるか?→普通に書けば猶予期間内に終了する。ロングランニングの時だけ気をつけろ
885:デフォルトの名無しさん
22/01/30 20:27:29.51 MKtsah/wM.net
各アプリケーションの機能テストで確認すべき項目と
非機能要求のテストで確認すべき項目と
フレームワークの仕様テストで確認すべき項目と
全部ごちゃ混ぜだから分かりにくい
タイムアウトを含め失敗時の振る舞いは一般的な品質レベルなら全部テストする項目
886:デフォルトの名無しさん
22/01/30 20:32:44.54 cT0our3Wa.net
組み込みになるとシングルコアで動くのにマルチコアで動かないとか、通信ライブラリが処理をつかんだままだとほかのスレッドが止まるとか(それマルチスレッドなのか?でも本当に起きる)
そんな感じになっていくからな。特にFreeRTOSは・・・
c#だとlockとかを知らないと色々トラブル。そっちの方が重要だろ
URLリンク(docs.microsoft.com)
887:デフォルトの名無しさん
22/01/30 22:57:40.72 aiFnFmm30.net
doxygenって何処のスレで質問すれば良いですか?
888:デフォルトの名無しさん
22/01/30 23:50:15.42 cT0our3Wa.net
スレ立てるまでもない質問はここで 158匹目
スレリンク(tech板)
889:デフォルトの名無しさん
22/01/31 00:03:34.26 HAfOA5uC0.net
>>870
。oO(ああ、こいつダメだ、経験が少なすぎてなんも当たったことねぇのなw)
890:デフォルトの名無しさん
22/01/31 01:18:01.43 rap/w09T0.net
GUIアプリ作るのにシングルスレッド縛りはありえねーって
891:デフォルトの名無しさん
22/01/31 01:20:52.56 PXu70Z+W0.net
(応答なし)
892:デフォルトの名無しさん
22/01/31 01:30:02.02 HAfOA5uC0.net
>>876
うまく行かなかったんだろ?w
893:デフォルトの名無しさん
22/01/31 02:43:38.51 rap/w09T0.net
>>878
GUIアプリでシングルスレッド縛りだと重い処理で画面固まってるように見えてしまうからうまく行かないね
894:デフォルトの名無しさん
22/01/31 08:09:11.84 RgoQRIUnM.net
>>870のどこがダメなのか分からない
スレッド制御を自前で1から書かなきゃいけなかった00年代ならともかく
async/awaitにほぼすべてを任せられて非同期を安全お手軽に書けるようになってる時代なのにさあ
脳みその中もPentium4あたりで進化が止まった老害が
async/awaitを当たり前に使う現在のコーディングスタイルについていけなくて
誰彼かまわずケチをつけてるだけにしか見えない
年取ってこういうゴミみたいなジジイにはなりたくないもんだ
895:デフォルトの名無しさん
22/01/31 09:50:16.85 JauXjIS80.net
何がしたいかによる
await/asyncを使うのは主に外部要因で待たされる時
ダウンロード残り1GBとかSQLサーバーからレスポンスが2秒以上かかってるとか
そういう感じの時クルクル回したりプログレスバーとキャンセルボタンが欲しいわけ
ボタンすら反応しませんだと、クソ重いソフトと因縁つけられちゃうの
一方マルチスレッドでCPU100%がん回しですってのがしたいことだったら
Partitioner.CreateとParallel.ForEachを使うawait/asyncは関係ない
896:デフォルトの名無しさん
22/01/31 10:15:13.28 FSK5xZBqM.net
大半のケースで考慮不要
この一言でまあそうだよねと納得できないなら開発経験不足としか言えん
897:デフォルトの名無しさん
22/01/31 10:47:47.62 F4OTxaxpa.net
もともとがc#に合わせた話じゃないからどうとでも読み取れちゃうんだよ
分かりやすいとこで言えば例えば
> ログは出力できるか?→出来ないことなんてあるの?
プログラミングの話をしてるのだからきちんと意図通りに動くことを把握するためのDebug.WriteLineのようなログと捉えたらできないことなんてあるの?となる
でもログファイル出力と捉えたら、マルチスレッドから同じファイルに対して書き込もうとして・・・なんてできないこともある
898:デフォルトの名無しさん
22/01/31 11:33:05.16 I+ECkei6M.net
そんなのはloggerがなんとかしてくれるから気にするな
つか今時はログは全部標準出力でいい
標準出力を拾って何処に吐くかは環境が担当するところ
899:デフォルトの名無しさん
22/01/31 11:38:53.86 BNlzdeLSM.net
>>883
> でもログファイル出力と捉えたら、マルチスレッドから同じファイルに対して書き込もうとして・・・なんてできないこともある
キューに書くなりして排他制御するだけじゃね?
900:デフォルトの名無しさん
22/01/31 12:08:05.50 F4OTxaxpa.net
そうなんだよ
だからログ取るならこのクラス使え(c#が勝手にスレッドセーフにしてくれたり管理するよ)
マルチスレッドからファイル操作するならlockで排他制御しろ(自分でスレッドセーフにしないとトラブルぞ)
ってチェックシートならいいんだけどな
901:デフォルトの名無しさん
22/01/31 12:13:17.55 a9TU5xJTa.net
オラオラ交通整理マン仕事しろや早く議論スレに誘導しろよ
まさか交通整理マン自身が議論してるんじゃねえだろうな?ん?
まあ、個人的には議論は結構だけど論点は明確にして欲しいね。
正直何を争ってるのかさっぱり分からんw
こんなあいまいな話で藁人形と戦ってる奴って普段よっぽど邪険にされてるのかねwww
902:デフォルトの名無しさん
22/01/31 12:53:42.98 80+F6Vz/M.net
かわいそうに
903:デフォルトの名無しさん
22/01/31 13:04:34.28 dnOSCP4XM.net
>>886
> マルチスレッドからファイル操作するならlockで排他制御しろ(自分でスレッドセーフにしないとトラブルぞ)
スレッドセーフならいいって話じゃないことぐらいは理解してから議論に参加しようよ…
904:デフォルトの名無しさん
22/01/31 15:26:32.90 2TQISd5L0.net
あ、これ議論なの?
905:デフォルトの名無しさん
22/01/31 19:09:11.37 yyWr14dta.net
凄まじく複雑な相談なんだけど良い?
インスタンスと対になる鍵オブジェクトって
xxxIdかxxxKeyかxxxTokenのどれで名付けるべき?
ちなみに中には格納番号が入っててリポジトリからインスタンスを引き出すのに使う
906:デフォルトの名無しさん
22/01/31 21:03:11.17 eqy2NGbAd.net
初心者スレだぞ
簡単な使い方ならともかく
なんか動かんだのデータ壊れただのデッドロックしただのの対策を一気に詰め込んでも無理でしょ
907:デフォルトの名無しさん
22/01/31 21:27:15.36 a9TU5xJTa.net
>>891
そもそも専用クラスにする必要あるの?
っていうかこの板命名スレもあるよ
いや目くじら立てて行くべきと言いたいわけじゃないw
908:デフォルトの名無しさん
22/02/01 11:07:54.02 Z6xO941E0.net
IDを使うときは配列でインデクサがある、とか
Keyを使うときは辞書でKey-Valueの対がある、とか
Tokenを使うときは重複しない文字列(大抵はハッシュ)が入ってる、とか
そういう話なのかな、C#とどう関係するのか知らんけど
909:デフォルトの名無しさん
22/02/01 11:19:59.86 Tjw+V3tAM.net
普通にハンドルパターンじゃないのか
910:デフォルトの名無しさん
22/02/01 12:10:52.81 LUb4jo/Ua.net
object xxxと対になる鍵オブジェクト = new object();
911:デフォルトの名無しさん
22/02/01 13:48:07.91 1d/yMvRJ0.net
TextBoxの高さに合わせてFormの高さを調整したいのですが、下記のようにすると、TextChangeのたびに高さが減ってしまいます。
何が原因でしょうか?
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Height = textBox1.Lines.Length * textBox1.Font.Height;
ClientSize = new Size(ClientSize.Width ,textBox1.Height);
}
912:デフォルトの名無しさん
22/02/01 18:19:16.26 R62wNw5Va.net
URLリンク(docs.microsoft.com)
913:デフォルトの名無しさん
22/02/01 18:21:14.03 I6aD7b89a.net
TextBoxの高さに合わせてFormの高さを調整したいだけなのに
textBox1.Height = でテキストボックスの高さまで変更してるからでは?
914:デフォルトの名無しさん
22/02/01 19:55:39.20 x6m1XFOP0.net
>>897
一回目の呼び出しで
フォントの高さに合わせてtextBox1.Heightを設定する(小さくなる)
textBox1.Heightの高さに合わせてフォントの高さが変わる(小さくなる)
二回目の呼び出しで
フォントの高さに合わせてtextBox1.Heightを設定する(小さくなる)
textBox1.Heightの高さに合わせてフォントの高さが変わる(小さくなる)
というループだからでわ?
少なくともtextBox1.HeightはtextBox1.Font.Height より少し大きいはずだから
そのまま代入していくとどんどん小さくなるんだと思うわ
915:デフォルトの名無しさん
22/02/02 00:39:48.73 TKyxc9mCa.net
>>897
これで出来た
でも何か気付いてない問題がありそうw
private void textBox1_TextChanged(object sender, EventArgs e)
{
var delta = textBox1.PreferredSize.Height - textBox1.Height;
Height += delta;
textBox1.Height += delta;
}
916:デフォルトの名無しさん
22/02/02 01:06:16.73 Xe1+J6sR0.net
TextChangedのイベントごとにHeight+=deltaの設計自体良くないとは思う
イベントごとにテキスト内容からHeightの再計算させるなら理解できるが
917:デフォルトの名無しさん
22/02/02 01:14:48.57 TKyxc9mCa.net
>>902
言いたいことは分からないでもないが、
恐らくセッター自身にプロパティーの値に変更がなければ何もせず戻る処理が
入っているはずなので考えすぎ。
実際問題動かしてみてそれに起因する問題があるようには見えない
918:デフォルトの名無しさん
22/02/02 09:11:06.71 RlffTed50.net
WinFormsのListViewで、仮想モード、LargeIcon表示にしたとき
Shift+マウスクリックでの項目の範囲選択がクリック位置より広く選択されてしまいます。
以下は2008年の古い情報ですがWindowsXPの不具合のため回避困難とあります。
URLリンク(social.msdn.microsoft.com)
Windows10でも解消していないようなのですが、
検索しても有用な情報が見つからずどなたか回避できてる方いないでしょうか。
919:デフォルトの名無しさん
22/02/02 09:12:35.95 4XyzPXmZ0.net
スクリーンロックを抑止したくてネットで調べて下のようなプログラムを書きました。
static async void Test(){
for(;;){
SendKeys.Send("Break");
await Task.Delay(10000);
}
}
目的は達成したのですが、Test()メソッドを終了するにはどう書けば良いでしょうか?
よろしくお願いします。
920:デフォルトの名無しさん
22/02/02 10:25:26.24 qrF7Vqa00.net
static bool _stopTest;
public void StartTest()
{
_stopTest = false;
Test();
}
public void StopTest()
{
_stopTest = true;
}
static async void Test()
{
while( !_stopTest )
{
SendKeys.Send("Break");
await Task.Delay(10000);
}
}
止めたいところでStopTestを呼ぶ
921:デフォルトの名無しさん
22/02/02 11:00:41.80 tkuApL0q0.net
CancellationToken使おう
private CancellationTokenSource cts = new CancellationTokenSource();
private Task task;
public void Start()
{
this.cts = new CancellationTokenSource();
this.task = Test( cts.Token );
}
public void Stop()
{
this.cts.Cancel();
this.task.Wait(); // 必要があれば
}
static async Task Test( CancellationToken ct )
{
while ( ! ct.IsCancellationRequested )
{
SendKeys.Send( "Break" );
try
{
await Task.Delay( 10000, ct );
}
catch ( TaskCanceledException )
{
}
}
}
922:デフォルトの名無しさん
22/02/02 12:33:54.15 2OSrRGw90.net
>>842
>> c# + visual studioでデータブレークポイント使えますか?
これひょっとして使えな
923:デフォルトの名無しさん
22/02/02 12:47:34.78 2OSrRGw90.net
c#でAddressSanitizerみたいなツールはありますか?
>>これひょっとして使えな
これは「これひょっとして使えないのでは?」です
924:デフォルトの名無しさん
22/02/02 12:49:24.20 5pRqnuwX0.net
>>908
URLリンク(docs.microsoft.com)
925:デフォルトの名無しさん
22/02/02 15:01:03.10 MolDdSgsa.net
URLリンク(stackoverflow.com)
l
foo.notify() => Monitor.Pulse(foo)
foo.notifyAll() => Monitor.PulseAll(foo)
foo.wait() => Monitor.Wait(foo)
926:デフォルトの名無しさん
22/02/02 15:06:00.81 MolDdSgsa.net
>>907だと、クリティカルタスクの最中に例外が起きたら壊れそうだなw
>>906は、Pulseが抜けてる
927:デフォルトの名無しさん
22/02/02 22:04:43.57 GVJKCJUY0.net
ピクチャーボックスに直線を実寸(㎜)で引きたいんですけど、どうすればよいですか?
928:デフォルトの名無しさん
22/02/02 22:13:43.42 NhKBMVet0.net
GraphicsオブジェクトのPageUnitプロパティを変更する
929:デフォルトの名無しさん
22/02/02 22:49:06.74 p1re6OTba.net
>>913
GDI+はたぶん常にdpiを96dpiと仮定しているので
モニターのdpiが96dpiなら>>914で上手く行くがそれ以外の場合は
自分でページ変換を設定しないとだめだと思うよ
930:デフォルトの名無しさん
22/02/02 23:21:53.08 vNzv2HbB0.net
GDI+のDPIは可変だよ 印刷にも使うんだから
描画先がモニタの場合WindowsのDPI設定に依存して変わる
例えば125%なら120dpiだな
まあDPI設定に従うだけでモニタのDPIは恐らく別だからモニタ上で正しく表現できるわけではないけど
931:デフォルトの名無しさん
22/02/02 23:29:58.32 30BhQoQ30.net
>>916
それってやっぱりモニターの解像度は96dpi固定ってことだろ
32インチ4Kスケーリング100%なら138dpiが取得できる方法を示さないと