23/04/10 18:04:17.45 qyQrCJTA0.net
>>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;
}
たぶんこのくらい必要
201:デフォルトの名無しさん (ワッチョイ 5234-Ay2p)
23/04/10 19:06:06.56 CWrknl8o0.net
comboBoxのテキストを変更できるようにするプロパティがあったよね?
202:デフォルトの名無しさん (ワッチョイ 25e4-eWK2)
23/04/10 19:44:46.51 1G6uJTu10.net
ワーカーサービスとサービスアプリって別物なの?
203:デフォルトの名無しさん (ワッチョイ 6e10-+HcC)
23/04/10 19:54:33.42 025b1B4Q0.net
>>196
BeginInvoke(new Action(() => comboBox1.Text = "a2"));
204:デフォルトの名無しさん (ワッチョイ 8205-QZiB)
23/04/11 07:47:00.52 p3uKa8IZ0.net
comboBoxの者ですが例示頂いたサンプルコードで期待の動作をしました
ありがとうございます
.Textのセッターで書き換えられたら直感的だなと思いつつ別の仕様で都合悪いんでしょうね
205:デフォルトの名無しさん (ワッチョイ 6e10-bvj9)
23/04/11 10:42:20.15 LwvkJIu70.net
大学だとmacは買うなと名指しで書かれてた
買うのはWindows11入りi5以上RAM8G以上のoffice付
206:デフォルトの名無しさん (ササクッテロロ Spd1-pbGt)
23/04/11 10:44:39.71 u/0zmHtvp.net
>>204
Mac「も」買えば無問題だぞ
207:デフォルトの名無しさん (ワッチョイ 495f-h/KG)
23/04/11 10:56:37.78 U1LmOZAY0.net
365のアカデミック垢(Education A3/A5)を配布してない大学なんだろうか?
208:デフォルトの名無しさん (ワッチョイ a9e5-/aea)
23/04/11 11:00:45.32 bVzsGz390.net
>>204
209:デフォルトの名無しさん (ワッチョイ 6e10-bvj9)
23/04/11 11:18:50.69 LwvkJIu70.net
officeは大学によって配布とそうじゃないとこがあるな
合格通知に付いていたパソコン購入の栞にはどこも同じようなスペックを書いてあった
毎年トラブルになってるらしくmacは非推奨、忘れてたけどSSDを強く推奨されてた。
210:デフォルトの名無しさん (オッペケ Srd1-QZiB)
23/04/11 12:05:57.60 Owu2Qdxkr.net
>>203
情報系大学ならOS問わず乗り越えて欲しいよね
強いて言えばニンテンドースイッチをハックしてOffice365動作させるくらいの気概が欲しい
211:デフォルトの名無しさん (ワッチョイ 412d-dXWb)
23/04/11 13:07:41.05 0aEeU09s0.net
東大はMacだもんな
212:デフォルトの名無しさん (ワッチョイ 6e10-bvj9)
23/04/11 15:24:29.19 LwvkJIu70.net
CPUが非intelな時点で選択肢には入らんでしょ
213:デフォルトの名無しさん (ワッチョイ 4642-Ay2p)
23/04/11 15:24:33.92 M16SAa5X0.net
>>207
SSDをSODと空目して、時間を止めるボタンを購入しちまう人もいるだろうさ
214:デフォルトの名無しさん (ワッチョイ a9e5-/aea)
23/04/11 15:35:49.07 bVzsGz390.net
amdは許して
215:デフォルトの名無しさん (ワッチョイ c5ae-izbf)
23/04/11 15:57:37.42 E8WJry610.net
経済学部とかならOS関係なくクラウドで全部出来るけども、
情報系なら機器制御とかもやるから、OS問わずは無理だろ
216:デフォルトの名無しさん (ワッチョイ eebb-9Wvd)
23/04/11 17:07:55.85 xhbQUVf+0.net
授業内容によってはMac非推奨もあり得るだろう
ただどこの大学のどの学部なのか書かないことには、何に向かないのか参考にもならないだろう
217:デフォルトの名無しさん (ワッチョイ 6e7b-k+0N)
23/04/11 18:13:31.92 SxJtNgeT0.net
ワッチョイ 6e10 3回
サクッテロロ Spd1
ワッチョイ 495f
ワッチョイ a9e5
オッペケ Srd1
ワッチョイ 412d
ワッチョイ 4642
ワッチョイ a9e5 2回
ワッチョイ c5ae
ワッチョイ eebb
218:デフォルトの名無しさん (ワッチョイ 9194-izbf)
23/04/11 19:01:55.92 yYayl2te0.net
URLリンク(books.google.co.jp)
の内容に関しての質問なんだけど、
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
}
219:デフォルトの名無しさん (ワッチョイ d907-NO7/)
23/04/11 19:08:53.25 gigFj8HV0.net
なんでってConsole.WriteLineが2回呼ばれてんじゃん
220:デフォルトの名無しさん (ワッチョイ 9194-izbf)
23/04/11 19:14:24.00 yYayl2te0.net
>>217
いや、だから static を付けない場合は、最初の出力は 0 なんだって
で、何故 static を付けると、3 になるかという事を聞きたいわけ
221:デフォルトの名無しさん (ワッチョイ d907-NO7/)
23/04/11 19:17:23.77 gigFj8HV0.net
何がわからんのかマジでわからん
初期化したらそれが出力されるのは当たり前じゃね?
222:デフォルトの名無しさん (ワッチョイ 9194-izbf)
23/04/11 19:19:52.43 yYayl2te0.net
>>219
で、static を付けた場合と付けなかった場合の出力結果の違いはどういう理由?
223:デフォルトの名無しさん (ワッチョイ 9194-izbf)
23/04/11 19:21:27.61 yYayl2te0.net
>>220
デフォルトコンストラクタ Foo() の直前の static の事ね
224:デフォルトの名無しさん (ワッチョイ d907-NO7/)
23/04/11 19:22:18.16 gigFj8HV0.net
どこにstaticつける話をしてるのか知らんけどクラスメンバーかインスタンスメンバーかの違い
静的コンストラクタはクラスメンバーがアクセスされる時点で初期化が終わってることが保証される
225:デフォルトの名無しさん (ワッチョイ d907-NO7/)
23/04/11 19:23:14.19 gigFj8HV0.net
>>221
それはコンストラクタじゃなくて静的コンストラクタだぞ
多分その本のもっと前に書いてある
226:デフォルトの名無しさん (ワッチョイ 9194-izbf)
23/04/11 19:39:59.03 yYayl2te0.net
>>222-223
staticを付けない、コンストラクタの場合、class Fooの最初の行でインスタンスが生成された時点では、Xが3に初期化されてないので、0になるが、
staticを付けた静的コンストラクタの場合、class Fooの最初の行とは無関係に、既にXが3に初期化された状態で Console.WriteLine(X) が実行済みなのね
public static Foo Instance = new Foo();
をコメントアウトして実行させてみて、やっと気付いた
有難う
227:デフォルトの名無しさん (ワッチョイ 4201-BePx)
23/04/11 23:11:43.43 /nZPjbDG0.net
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行目の静的コンストラクタとは別のものになる
228:デフォルトの名無しさん (ワッチョイ 9194-izbf)
23/04/12 01:51:45.88 3I+WNe+L0.net
>>225
分かりやすい説明有難う御座いました。
229:デフォルトの名無しさん
23/04/12 08:44:45.21 75Jdcna40.net
静的イニシャライザの実行順は不定
230:デフォルトの名無しさん
23/04/12 08:58:31.49 5OqrGPiIr.net
そもそもこんな使い方することってある?
こんなわかりにくい実装したらバグしか生まないだろ
231:デフォルトの名無しさん
23/04/12 09:17:16.51 g9fBg21da.net
どういう順序で実行されるか解説するテキストで実験的なコードが紹介されてるだけだろ
本文が3行以上読めないやつがここで聞いただけ
232:デフォルトの名無しさん
23/04/12 10:30:19.47 mXnPigifr.net
いちいち質問者を貶すようなことでもなかろうに
233:デフォルトの名無しさん
23/04/12 11:26:53.10 yAM4RrWLM.net
どちらかと言うと本文を読んでいないのが >>229 でみんな雰囲気で答えてるだけ
英語嫁
234:デフォルトの名無しさん (アウアウウー Sa05-NO7/)
23/04/12 12:21:14.58 bugel0eha.net
バグしか生まない実装を紹介する本ねぇ
読んだと自称するやつにはそう見えるのか
春だなぁ
235:デフォルトの名無しさん (ブーイモ MM66-Udzl)
23/04/12 12:29:42.24 USOc3PY3M.net
実際質問の出力結果示さずにこのスレの連中にstaticありなしの出力結果予想させたら3割も正解しなさそう
236:デフォルトの名無しさん (オッペケ Srd1-ZlFW)
23/04/12 12:31:58.00 gsM5MkRcr.net
そういう意味ではアンチパターンだな
237:デフォルトの名無しさん (オッペケ Srd1-HvLO)
23/04/12 13:45:09.09 4Can4aDGr.net
C#の挙動がなぜそうなってるかの理由を知ることと、それを実際に開発に使用するかどうかは話が別だろう
当の本もこの挙動を利用して実装しろと勧めてるわけでもなし、バグしか生まない~などと腐すのも筋違い
238:デフォルトの名無しさん (ワッチョイ 4201-BePx)
23/04/12 14:11:43.79 uWUQySNG0.net
本に書いてあるコードでは>>225の5行目にstaticはついてない
3行目と4行目を入れ替えると出力結果が変わるようなことになるという注意を促して
イニシャライザの実行順序を理解させようとしている
static fieldの定義順に依存したコードはアンチパターンと言ってもいい気はするが
現実には↓こういうコード書く人がいるので動きを理解してることは重要
URLリンク(stackoverflow.com)
239:デフォルトの名無しさん (オイコラミネオ MM29-Ay2p)
23/04/12 17:54:22.82 lYmUspEYM.net
本にはこのコードのstaticはついてないのでいくら読んでもそういう話にはならない
コード提示した人が自分でstaticつけて疑問に思ったことを書いてるだけ
チャンと英語読めば批判してる人の脊髄反射でしかないとわかる
240:デフォルトの名無しさん (オイコラミネオ MM29-Ay2p)
23/04/12 17:57:59.05 lYmUspEYM.net
>>232
英語嫁と上で書いてやったのに読まない馬鹿
241:デフォルトの名無しさん (オイコラミネオ MM29-Ay2p)
23/04/12 18:00:18.84 lYmUspEYM.net
>>232
ごめん自分が読めてなかった
自分が馬鹿だったわ…
242:デフォルトの名無しさん (ワッチョイ d907-NO7/)
23/04/12 21:13:56.15 75Jdcna40.net
草
243:デフォルトの名無しさん (ワッチョイ c5ae-izbf)
23/04/13 17:15:29.58 Zu8K3N7a0.net
過去にはAny CPUを選ぶと32bitライブラリか64bitライブラリかわからなくてエラーになる事があるから、
x86かx64に固定するのを推奨とかどこかで見た気がするけど、
今はそんな事無くなったのかな?
244:デフォルトの名無しさん (ワッチョイ c7e5-S3w6)
23/04/18 09:43:52.47 8GgykzJw0.net
ifで非null判定してからアクセスしてんのにnullの可能性がありますとか警告出す最近のC#はほんとクソ
245:デフォルトの名無しさん (ワッチョイ 4707-uZLY)
23/04/18 09:47:05.00 zIS6YJzM0.net
>>242
出さねーよw
246:デフォルトの名無しさん (ワッチョイ bfda-wFhX)
23/04/18 10:17:07.64 HhMbwi3l0.net
コンパイラのnullチェックを混乱させる凄い(≠素晴らしい)コードなのかもしれない
247:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI)
23/04/18 10:21:16.50 dDei21Qyp.net
見落としてる分岐があるだけだろ
248:デフォルトの名無しさん (アウアウウー Sacb-uZLY)
23/04/18 10:22:53.46 HoHH5EgOa.net
多分チェックした後に別の値を代入するか値が変化するものを使ってるんだろうな
たとえばプロパティは一回目のアクセスと二回目のアクセスで同じ値が得られるとは限らない
変数に入れろ
そしたら多分警告消えるから
249:デフォルトの名無しさん (ワッチョイ dfbd-baic)
23/04/19 07:26:32.14 9LVfV8Mo0.net
警告が消えるのに時間がかかったり、Visual Studioを立ち上げ直したら警告が消えたことがある。
250:デフォルトの名無しさん (ワッチョイ 4707-uZLY)
23/04/19 07:56:31.56 A9DJak9S0.net
マシンが遅いだけ
251:デフォルトの名無しさん (ワッチョイ bf42-sFbk)
23/04/19 08:18:39.49 /RLG/xCj0.net
不必要なhoge?.hage();が残っているとnull判定されることがあるね
?取るとワーニングが消える
252:デフォルトの名無しさん (ワッチョイ 4707-uZLY)
23/04/19 09:00:29.09 A9DJak9S0.net
hoge?.hoge()はhoge!=null?hoge():nullと同じ
nullが返る可能性があることを示すコードだからそりゃnullの可能性があると判定されるわな
253:デフォルトの名無しさん (ワッチョイ bf42-sFbk)
23/04/19 09:16:28.63 /RLG/xCj0.net
>>250
問題はhoge?.hoge()のところではワーニングが出ずに、離れた場所にあるhoge.bar()でワーニングが出るから
知らないと混乱するってことだね
254:デフォルトの名無しさん (ワッチョイ 4707-uZLY)
23/04/19 09:45:55.68 A9DJak9S0.net
そこで問題がないのに出るわけないじゃん
離れた場所にあるなら一度変数に入れなよ
そしたらnullの可能性があるかどうかマウスホバーで教えてくれるから
255:デフォルトの名無しさん (ワッチョイ 4707-uZLY)
23/04/19 09:47:07.48 A9DJak9S0.net
結局この警告はバグを潰してくれてるものだから文句を言うのは筋違いだぞ
本来なら警告の代わりに実行時エラーになってたものだからな
256:デフォルトの名無しさん (ワッチョイ bf42-sFbk)
23/04/19 10:04:51.79 /RLG/xCj0.net
>>252
コンストラクタなどで初期化していて本来はワーニングが出るはずがないのに
途中でhoge?hage()なんてコードがあるからヌルが入る可能性があると判断されるようだ
だから?を外すと解決するんだが、それに築くのが大変って話ね
257:デフォルトの名無しさん (ワッチョイ 4707-uZLY)
23/04/19 10:18:42.95 A9DJak9S0.net
そこでnullを代入してるのに気づくのが大変てことはないと思うがな
警告が出ないなら大変かもしれんけど
258:デフォルトの名無しさん (アウアウウー Sacb-uZLY)
23/04/19 10:25:41.00 ozyRSzfKa.net
たとえばUnityなんかだと暗黙の代入演算子をいじっててnullでないものがnullエラーを出すよ
コンストラクタで生成してすぐnullになるオブジェクトも作れる
そういうのを実行前に警告として教えてくれてるんだから親切以外のなにものでもないだろ
警告があれば何か問題があることにすぐ気づけるし気づいたらマウスをちょっと動かせば原因がわかる
コーディングが簡単になりこそすれ難しくなることなんかないだろ
259:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI)
23/04/19 10:29:18.14 wTDlMyrbp.net
nullableなboolean変数を条件判断させるとき
nullだったらどっちに判定されるんだ?
260:デフォルトの名無しさん (アウアウウー Sacb-uZLY)
23/04/19 10:43:36.85 ozyRSzfKa.net
どっちでもない
nullはnull
261:デフォルトの名無しさん (ワッチョイ 7ff2-iKPJ)
23/04/19 12:47:18.86 /ifWvnPE0.net
勉強になった!
262:デフォルトの名無しさん (スプッッ Sdff-wBI8)
23/04/19 14:16:39.58 mDR4Tmnid.net
(bo
263:ol)null
264:デフォルトの名無しさん (ワッチョイ ff79-e5FP)
23/04/19 18:22:12.39 oWlQU8HM0.net
もうnullだったら死んでくれていい
プログラムでぬらぶるってるとムカつく
いいんだよ例外でもなんでも死ねば
265:デフォルトの名無しさん (ワッチョイ ff79-e5FP)
23/04/19 18:32:54.51 oWlQU8HM0.net
プログラムの99.998%は概ねnullになんかなんないところばっかりなのに
なんでこんなクソ構文作ったのかわからん
現場で書くと嫌われるコード
こんなもんチェックするより他にやることはいくらでもある
266:デフォルトの名無しさん (ササクッテロロ Spfb-tEYI)
23/04/19 19:21:06.22 Yh/qVtVOp.net
bool値に三状態あるのかw
267:デフォルトの名無しさん (ワッチョイ 5f79-uE6i)
23/04/19 19:27:25.28 Gw9y9MAb0.net
ヌルヌルヌールヌル
268:デフォルトの名無しさん (オイコラミネオ MM5b-baic)
23/04/19 19:28:11.01 ol2MoW3SM.net
DBだと伝統的に3値だったりが当たり前
かなり問題がある作り
269:デフォルトの名無しさん (ワッチョイ 7f7b-i286)
23/04/19 19:33:27.51 fW0fg9Ti0.net
null 許容値型
URLリンク(learn.microsoft.com)
null許容値型(Nullable<T> 型)
URLリンク(ufcpp.net)
270:デフォルトの名無しさん (ワッチョイ bfe9-Naft)
23/04/19 20:30:00.61 C4s4zrWJ0.net
FormアプリでForm1とForm2を作る
Form1にラベルを作る
Form2にボタン1,ボタン2を作る
ボタン1を押すとラベルに"1"ボタン2を押すとラベルに"2"を、
Form2を閉じることなく設定するプログラムを作りたいのですが
どういう作り方をすれば実現できるでしょうか。
Form2にプロパティを作りForm1で文字を受け取る方法だとForm2を閉じないと値が設定できません。
よろしくお願いします。
271:デフォルトの名無しさん (ワッチョイ 7f7b-i286)
23/04/19 20:35:45.45 erb9d6p60.net
>>267
別のフォームのデータを取得、設定する
URLリンク(dobon.net)
272:デフォルトの名無しさん (ワッチョイ bfe9-Naft)
23/04/19 22:15:32.11 C4s4zrWJ0.net
>>268
記事中のOwnerプロパティを使うことでやりたいことができました。
ありがとうございます。
273:デフォルトの名無しさん (ワッチョイ 7f10-S3w6)
23/04/20 21:58:50.89 XyBZLb7d0.net
ぬるり
274:デフォルトの名無しさん
23/04/22 21:40:28.10 nV5+mUIN0.net
自作メソッドが投げる可能性がある例外の表記方法についての質問です。
ドキュメンテーションコメントの<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> に表記する必要がありますか?
そうでない場合、表記するべき例外と、そうでない例外はどういう基準で判断すればよいでしょうか?
275:デフォルトの名無しさん
23/04/22 22:30:09.44 XuPaU8GB0.net
>>271
めんどくさいから例外を吐くMethodを記載して、詳細はソチラでにしちゃうかな
276:デフォルトの名無しさん
23/04/23 00:52:29.94 qbQJEsvk0.net
>>271
例外なんて元々どんぶりなんだから
そんな厳密に何かやろうとするなら
そもそも使うなでFA
277:デフォルトの名無しさん
23/04/23 09:59:39.79 UBkEK/lQ0.net
ZipFile使ってること書いてそっち参照とし、独自のは詳細書くとか?
278:デフォルトの名無しさん
23/04/23 10:04:39.68 DUqm0gOHM.net
書いたことがない
自分で使うなら覚書として必要な範囲で
他人に提供するライブラリでも普通は書かない
使われないし必要とされてないから
常識的にそれが何をしているか想定できる場合は書かない
今だったらファイルアクセスしてますよとか引数を取りますよで利用側もある程度想像できる
標準ライブラリの例外でないものを投げる可能性があり
それに回復手段がある場合に書くぐらいなんじゃないかなと
279:デフォルトの名無しさん (ワッチョイ 6610-ASru)
23/04/24 06:43:49.53 P+2JsUDo0.net
ドキュメンテーションコメントなんか書いたことないな・・・
280:デフォルトの名無しさん (アウアウクー MM7d-pS66)
23/04/24 08:26:23.98 F+RPKNFDM.net
ウチはコーディング規約で必須
どこも書いてるかと思ってたけど違うんだね
281:デフォルトの名無しさん (アウアウウー Sa21-ZiWf)
23/04/24 08:47:42.51 iy7IhEXOa.net
今はドキュメンテーションコメント書いたらコパイロットがコード書いてくれるんじゃね
282:デフォルトの名無しさん (ワッチョイ 3679-ByXY)
23/04/25 07:51:13.18 kQ+fG+er0.net
JavadocやDoxygenってゴミにしかなんなくね?
283:デフォルトの名無しさん (ワッチョイ a95f-SH/E)
23/04/25 08:17:55.28 wOLFytDy0.net
>>279
成果物のかさ増しには最適なんだよw
284:デフォルトの名無しさん (スプッッ Sdea-8Xzj)
23/04/25 08:42:20.58 2JpsSRmdd.net
詳細設計書の雛形を自動で作ってくれる…
んだぜ
285:デフォルトの名無しさん (ワッチョイ a5e5-ASru)
23/04/25 08:45:42.17 XCOYQ77g0.net
詳細設計してからコード書いてクレメンス
286:デフォルトの名無しさん (ワッチョイ aade-RykB)
23/04/25 10:50:36.92 KrvjcZC00.net
質問なんですが、コントロールのボタン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個程度ならダラダラ書いたほうがいいですか?
287:デフォルトの名無しさん (ワッチョイ 1507-ZiWf)
23/04/25 11:03:26.95 h+X7r+oZ0.net
ViewModelも使わないような泥縄式プログラミングならダラダラ書けばいんじゃね
インスタンスを何らかの方法(前もって配列に入れるとかタグをつけるとか)でフィルタリングすればループが使えるし何ならイベントハンドラ自体一つにまとまるくらい同じことしかしてないんじゃないかとも推測できるが
288:デフォルトの名無しさん (ワッチョイ 1507-ZiWf)
23/04/25 11:05:37.36 h+X7r+oZ0.net
あとイベントハンドラを直接呼び出すのは良くないぞ
イベントハンドラの中から実際の処理を行う関数を呼び出すように作ってイベントハンドラを他の関数から呼びだしたい時には代わりにその処理の方を呼び出すんだ
289:デフォルトの名無しさん (ワッチョイ 1507-ZiWf)
23/04/25 11:07:12.18 h+X7r+oZ0.net
どうしてもハンドラの方を呼び出さなきゃいけない時はButton.PerformClickな
290:デフォルトの名無しさん (ワッチョイ aade-RykB)
23/04/25 12:14:00.34 KrvjcZC00.net
>>284,285,286
サンクスです、まずViewModelがわかりません。ググルとandroidやzamarinの事がヒットします。
windowsのformでプログラム作ってます。もうちょと調べてみます。
イベントハンドラの中のメソッドを呼びだすのですね、Button.PerformClickと迷ったのですが
2つの違いがいまいちわかってなくて、もらったアドバイスでもうちょと考えてみます
291:デフォルトの名無しさん (スプッッ Sdea-8Xzj)
23/04/25 13:05:52.77 +0i9aSeod.net
適当なコレクションに入れてforeachでperformclickだな
292:デフォルトの名無しさん (ワッチョイ aade-RykB)
23/04/25 17:08:17.65 KrvjcZC00.net
>>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();
}
こんな感じでしょうか(途中で挫折した)
293:デフォルトの名無しさん (ワッチョイ a5e5-ASru)
23/04/25 17:34:19.71 XCOYQ77g0.net
フォームに他にボタンが無いなら↓でもやれる
foreach(Control childItem in Controls) {
if(childItem is Button button)
button.PerformClick();
}
294:デフォルトの名無しさん (オイコラミネオ MMb5-/HYv)
23/04/25 17:41:31.18 jwlAeKCmM.net
まずボタンから処理を分けようか?
リファクタリングでメソッドに書き直そう
private void Button_Click(object sender, Args e)
{
//ここは実際に何かやってるが仮にコメントにしてある
//
//ここまで
}
仮にこんなコードだとして
//から始まる3行を選択して右クリックすると出てくるメニュー上の方に "クイックアクションとリファクタリング" というのがあるから
それをクリックすると "メソッドを抽出する" と言うのが出てくるので選ぶ
そのあとメソッド名をつけるだけでイベントハンドラじゃなくて単純なメソッドになる
ボタンをクリックしたと言う名前じゃなくて処理にあった名前にできるしそうするべき
いちいちボタンNが何をしていたか調べたり覚えなくて済む
こういうふうにしてあちこちの処理を簡単にメソッドにできるので
処理の区切りでメソッドにしよう
処理に名前を付けて流用できるようにしよう
295:デフォルトの名無しさん (ワッチョイ aade-RykB)
23/04/25 20:49:06.41 KrvjcZC00.net
>>290
レスさんくすです
こんなシンプルにかけるんですね、ちょと理解がむずいところがあるけど
これをもとにちょっといじくってみます
>>291
丁寧な解説ありがとう
なるほどイベントハンドラからメソッド切り出すのはこうすればいいのですね
他からメソッド呼び出すとき意味も分かりやすく、見通しもよくなりますね
リファクタリングはやったことなかた
296:デフォルトの名無しさん (オイコラミネオ MMb5-/HYv)
23/04/25 23:36:51.46 jwlAeKCmM.net
>>292
これだけできるとコードの書きやすさが格段に上がるよ
メソッド内全部じゃなくてもいい
適当に切り出しても引数とかもちゃんとくくりだしてくれる
出来ない場合は理由があるのでそれも勉強になる
失敗してもアンドゥしたらいいだけだし
297:デフォルトの名無しさん (ワッチョイ 3abd-/HYv)
23/04/26 00:00:21.94 lnboBUB50.net
>>291
こんな機能あったんか…。知らんかった。
298:デフォルトの名無しさん (オイコラミネオ MMb5-/HYv)
23/04/26 00:31:44.42 1VlSMqUTM.net
他にもいろいろ機能があるよ
いろいろ試してね
299:デフォルトの名無しさん (ワッチョイ f1e4-n/u1)
23/04/26 06:43:05.45 aS9C8tBv0.net
>>291
こんな機能知らなかった
勉強になったわ
300:デフォルトの名無しさん (ワッチョイ 6a7f-p1wa)
23/04/28 01:40:04.13 EFykGfO70.net
ほんとVisual studioは神
301:デフォルトの名無しさん (ワッチョイ ea79-lTfL)
23/04/28 01:47:14.94 yqQLE+sa0.net
それっぽい名前を付けるのが一番面倒だから
そこは処理をAIに要約させて付けて貰う
完璧だな
302:デフォルトの名無しさん (ワッチョイ 4954-YWDm)
23/04/28 04:28:06.22 SQeM8rhL0.net
非同期メソッドを実行する時「戻り値は特に必要ないが、例外は伝えてほしい」という場合、
戻り値は適当に int とかにしても問題ないでしょうか?
理想的な方法があれば教えてください。
例:
public Task<int> SomeMethod()
{
return await Task.Run(()=>
{
try
{
//非同期で実行したいメソッド。
return 1;
}
catch
{
throw;
}
});
}
303:デフォルトの名無しさん (ワッチョイ 6610-ASru)
23/04/28 07:28:54.39 dvpYRirO0.net
戻り値無くても例外は発生するぞ
ていうかthrowするだけならtry要らないだろ
304:デフォルトの名無しさん (ワッチョイ 6663-Be6V)
23/04/28 07:38:28.05 4gfllXQT0.net
public async Task SomeMethod()
305:299 (ワッチョイ 4954-YWDm)
23/04/28 07:46:32.72 SQeM8rhL0.net
>>300-301
ありがとうございます。
本当に助かりました。
306:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/02 15:27:13.55 +P/djKKr0.net
>>300
以外と例外処理って勘違いしてる奴が多いんよ
例外が発生する可能性がある場所にtry catch書くべきって思ってる奴が7割ぐらい居る
正解は例外が発生した場合にリカバリー処理を書く場合に使用する
307:デフォルトの名無しさん (アウアウウー Sa1b-gncP)
23/05/02 15:48:44.54 k2jSiG28a.net
リカバリー処理とは?
308:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/02 15:54:32.37 +P/djKKr0.net
そのままの意味どうすよ
回復や復帰を意味する言葉通り
例えば通信中に環境が悪く回線切断
例外からそれは分かるので回線が繋がりやすい場所は移動する様にメッセージを出した後に再接続して通信を続行させる
309:デフォルトの名無しさん (ワッチョイ 7f79-tpgI)
23/05/02 16:24:14.51 2rV8iq3c0.net
UIソースでtrycatch書くための仕組みだろ
返せる例外は複数も行けるけど1つしか想定してないからどんぶりの類
本処理中と終了処理があるような処理は想定外
終了処理は行われないで帰ってくる
厨房の工作キット
310:デフォルトの名無しさん (アウアウアー Sa4f-ef8y)
23/05/02 16:28:46.70 GVM+dlL1a.net
リカバリー処理とは限らんでしょ
311:デフォルトの名無しさん (ワッチョイ 375f-Hgfr)
23/05/02 16:48:17.59 4Yks9dbV0.net
まあ、自分の業務だけが全ての人は知見が狭くてかなわんなw
312:デフォルトの名無しさん (ワッチョイ 97cf-hzXf)
23/05/02 17:26:39.90 ID016ee+0.net
復帰とも書いてるから、例外の伝播をそこで止めて通常動作に戻すこと全般を言っているんなら
大体合ってるんじゃないかな。
313:デフォルトの名無しさん (ワッチョイ 9f4b-gncP)
23/05/02 18:28:49.42 2Pbut5Rc0.net
独自の例外に変換することもあるのでは
314:デフォルトの名無しさん (ワッチョイ 3754-wHlW)
23/05/02 18:29:31.06 yUli7OqN0.net
try catch はリカバリー処理とかユーザー通知も含めて、"例外が起きたら何かしたい" 時に使う物くらいにしか考えてなかったなぁ。
void Method() {
try {
処理
} catch (Exception ex) {
//if (この場で復旧処理したい) { 復旧処理 }
//if (メソッド呼び出し元に例外が起きたことを伝播したい) { 例えば、throw する }
//if (ログを出力したい) { ログ出力する }
//if (別のプロセスを起動したい) { 別のプロセスを起動する }
//if (その他諸々何かしたい) { その他諸々何かの処理 }
}
315:デフォルトの名無しさん (ワッチョイ 9f7f-ExZu)
23/05/02 18:29:58.08 Iiod3Ljm0.net
相手サーバーに拒否されたとかそのままコケて欲しい時はcatchしなくて良いしな
316:デフォルトの名無しさん
23/05/02 21:03:09.39 N5mno8Ao0.net
質問いいですか?
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
317:デフォルトの名無しさん
23/05/02 21:04:43.29 N5mno8Ao0.net
>>313
途中で投稿してしまった
これはなぜうまくいかないのでしょうか?
318:デフォルトの名無しさん
23/05/02 21:11:45.34 V30afgjZ0.net
動くけどなー
319:デフォルトの名無しさん
23/05/02 21:19:48.53 N5mno8Ao0.net
まじでっ
320:デフォルトの名無しさん
23/05/02 21:20:16.79 yUli7OqN0.net
別フォームからクリック出来たよ。
ソース全体が不明だから何とも言えないけど、
1. Form2 クラスの form1 ・ _form1 変数は、ちゃんと Form1 のインスタンスを参照出来てる?
2. 自動クリックされる Form1 のボタンは、ちゃんと Name = button1 になってる?
321:デフォルトの名無しさん
23/05/02 21:21:01.87 yUli7OqN0.net
間違えた。
Name = "button1"
322:デフォルトの名無しさん
23/05/02 22:19:38.01 XpNDWH0U0.net
キャストってプロパティより優先順位低かったっけ?
323:デフォルトの名無しさん
23/05/02 22:21:39.83 N5mno8Ao0.net
>>315
サンクスです、文法問題ないのだったら、ここに書き漏らしてる何かが悪いのだろうか
>>317
さんくすです、うまくうごくのですね _form1 は
_form1.button1.Text = "hogehoge";
がうまくいくのでインスタンスを参照できてるかな、NameもVSのプロパティそのままで
324:デフォルトの名無しさん
23/05/02 22:29:06.71 N5mno8Ao0.net
>>319
俺への回答でしょうか?試しに
(Button)(_form1.Controls["button1"])
みたいにやってみたけどうまくいかず
325:デフォルトの名無しさん
23/05/02 22:47:23.62 NVQj7oowr.net
「うまくいかない」の内容をもう少し詳しく書くようにしよう
何も起こらないのかそれともエラーが出るのか
エラーが出るなら具体的にどんなエラーメッセージなのか
326:デフォルトの名無しさん
23/05/02 22:51:11.59 V30afgjZ0.net
>>320
もしかしてForm1のPanelとかの中にbutton1が入ってるんじゃ
そしたら_form1.panel1.Controls["button1"]よ
327:デフォルトの名無しさん
23/05/02 23:02:01.80 N5mno8Ao0.net
>>322
失礼しました、例外がスローされます
selectedButton.PerformClick();のところで止まってselectedButtonがnullみたいです
System.NullReferenceException: 'オブジェクト参照がオブジェクト インスタンスに設定されていません。'
328:デフォルトの名無しさん
23/05/02 23:06:31.60 HZAuKpK5M.net
>>324
それ単純に名前ミスってるだけだよ…
329:デフォルトの名無しさん
23/05/02 23:09:12.69 N5mno8Ao0.net
>>323
ビンゴでした、うまく動きました
グループボックスの中にボタン入ってました、こんなのいるんですね
ありがとうございました
330:デフォルトの名無しさん
23/05/02 23:12:57.82 N5mno8Ao0.net
>>325
名前はインテリセンスで出てこないから要注意ですね
一応単語を選択すると同じ単語が色分けされるから、そこで確認しました
331:デフォルトの名無しさん (ワッチョイ 9fde-fitb)
23/05/02 23:32:01.14 N5mno8Ao0.net
たすかりました
ありが㌧
332:デフォルトの名無しさん (オイコラミネオ MM6b-hzXf)
23/05/02 23:46:40.83 HZAuKpK5M.net
テキストでコントロール指定したりPerformClick()使うのは最初だけだから
初心者だからなんでも使えばいい
そこから出られるのかどうか
333:デフォルトの名無しさん (ワッチョイ 9f79-zzYQ)
23/05/03 00:32:32.38 Kv12u2jn0.net
>Controls["button1"]
こんなもん使うなカスボケってことは理解できたんかな?
334:デフォルトの名無しさん (ワッチョイ d7ac-9Trp)
23/05/03 01:23:01.23 Ia3mFb590.net
まあ他人の実際のコードを見るようになってからじゃね
自分で書いて動かすだけで手一杯なんやろ
335:デフォルトの名無しさん (ワッチョイ 9f4b-gncP)
23/05/03 02:28:32.14 vL8FscsM0.net
しっけーなおまえ等
336:デフォルトの名無しさん (ワッチョイ 3754-wHlW)
23/05/03 05:15:12.14 X2wTGB2Y0.net
自分は、DataGridViewColumn.DataPropertyName でプロパティ名を文字列で指定してカラム参照してるわ。
本職はプログラマーじゃないから許してクレメンティン。
337:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 05:27:13.82 iydNsBEo0.net
別に良いんだよ
馬鹿なプログラマはこうするべきだってって感じで言うけどただの無能
動けば良いんだよ
実際売れてるとか人気のアプリのコードなんて糞みたいなもん
音楽で考えると分かりやすい
人気の音楽や長年聴かれる音楽って結構シンプルやろ
ギターとかの超絶テクニックやら奏法が特殊なら良い音楽かって言えば違うやろ
実際はミリオンセラーの音楽なんて小学生が少し練習すれば弾ける様になるのが結構ある
338:デフォルトの名無しさん (アウアウクー MM8b-ef8y)
23/05/03 05:
339:33:27.84 ID:0APi2HUGM.net
340:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 05:54:45.19 iydNsBEo0.net
同じやで
都合も良いも無いやろ
何の為にソフト作るんや
使う側にして見りゃ中のコードが糞かどうか関係無いやん
ちゃんと動いて結果が出れば良いだけなんだから
341:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 05:56:22.47 iydNsBEo0.net
アレかなもしかしてエンジニアって勘違いしてるパターンか?
俺らって大抵はエンジニアじゃなくてサラリーマンだぞ
342:デフォルトの名無しさん (ワッチョイ 1707-rvTa)
23/05/03 07:46:05.28 7KJ/CzIt0.net
>>334
音楽で考えるとわかりやすいんじゃなく音楽と違うものを音楽にしてしまったことで話が変わってるだけだぞ
プログラミングはロジックの塊
音楽より論文に近い
思いついたことをまとまりなく書き連ねたらダメ出しされるのは当然だろ
小論文ならそれでもまだ読めるかもしれんがな
343:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 07:52:55.78 iydNsBEo0.net
>>338
動けば問題無いよ
論文と違って無駄があろうが何だろうが結果が正しければ良い
例え途中が間違っていても奇跡的にでも結果が正しければ問題無い
お前の例えの方が全然違うやんw
無能やな
344:デフォルトの名無しさん (ラクッペペ MM8f-N7xh)
23/05/03 08:03:49.34 s1e64EMrM.net
楽しければいいんだよ
法律やルールなんてくそ食らえ
…とかいう人なの?
345:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 08:13:38.78 iydNsBEo0.net
違うぞ
ルールや法律に違反しなきゃ何やっても良いって言ってるだけや
346:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 08:19:44.90 iydNsBEo0.net
ついでに言うならペナルティが罰金の場合
罰金払ってでも儲かるなら違法な行為はする
ちなみ大企業は堂々とそういう事してる
例えば特定保健指導の実施率のペナルティ
大企業だと自身で保険組合持ってる場合が多い
従業員も多く色々な対策に金使うよりペナルティ払った方が安い場合もある
そういう場合は普通に違反してペナルティ払ってる
一例を挙げるならトヨタがそれに当たる
347:デフォルトの名無しさん (ワッチョイ 975f-VSqy)
23/05/03 08:25:24.40 eaeSSGs50.net
「正しく動く」は単なる前提に過ぎず、目指すものではない
エンジニアリングにおける「Easy」と「Simple」を区別できないおじさんは淘汰される
348:デフォルトの名無しさん (スッップ Sdbf-oJ27)
23/05/03 08:27:58.97 s1pMNzuQd.net
そう言うなよ世の中の7割はルールに従って真面目にやれば出世や稼げると勘違いしてる無能なんだからさ
有能で稼げる奴は法律やルールでさえ損得を天秤に掛けて儲かる場合は普通に違法行為を行える
勿論逮捕とかされるような事案には手を出さないが1億10億の罰金払って100億稼ぐのが有能
349:デフォルトの名無しさん (ワッチョイ 9fde-fitb)
23/05/03 08:34:50.09 aEnVTx4R0.net
>>329
PerformClick()使う理由は
ADIR01P USB赤外線リモコンアドバンス
URLリンク(github.com)
このアプリをいじって、追加機能やform2でボタンだけのコンパクトなUIが欲しかったからです
>>330
確かに気持ち悪い感じはしますね、form2で10個ほどのボタンにtagつけて、
対応するform1のボタンと同じ働きさせるにはこれぐらいしか思いつかない
>>334
動けばいいと思って書いてますが、こうするべきだって話は聞きたい
350:デフォルトの名無しさん (アウアウウー Sa1b-rvTa)
23/05/03 08:34:58.86 Zrw+HhQra.net
>>339
動くのは最低限だぞw
お前のレベルの話で済むのは一人で作るちっこいアプリだけだw
351:デフォルトの名無しさん (ワッチョイ 3702-ITaW)
23/05/03 08:39:30.63 XU1+7Xhm0.net
そもそも有能な奴はこんなところに来ない
352:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 09:16:01.84 iydNsBEo0.net
>>346
ほんと無能だな
大規模だってまともに動かなきゃ意味ないだろ
そういう意味でも動けば良いんだよ
353:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 09:17:54.09 iydNsBEo0.net
なんで動かなきゃってのがどのアプリやシステムでも同じレベルだと勘違いしてるんやろ
それぞれにレベルっていうか難易度があってその上で動くレベルに決まってるのに
ほんと思考が無能
354:デフォルトの名無しさん (ワッチョイ 1fbd-hzXf)
23/05/03 09:32:23.88 7Db4yG9j0.net
>>1
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
355:デフォルトの名無しさん (アウアウウー Sa1b-rvTa)
23/05/03 09:39:20.03 Zrw+HhQra.net
>>348
動くのは最低限の当たり前でその上で保守の話をしてるのにお前一人だけ動かないものの話をしてるなw
356:デフォルトの名無しさん (アウアウウー Sa1b-rvTa)
23/05/03 09:52:09.50 Zrw+HhQra.net
やっと意味がわかったかもしれん
要するに疎結合とかが理解できなくてそこまで要求されると動くものが作れないから騒いでるのか
ふつう作れるよ?w
357:デフォルトの名無しさん (ワッチョイ 1fbd-hzXf)
23/05/03 09:54:21.80 7Db4yG9j0.net
>>1
358:デフォルトの名無しさん (オッペケ Sr8b-/vMP)
23/05/03 10:02:18.52 AjLrekoLr.net
ワッチョイ7c-はNGになってるわ
前にも暴れててそれで入れたんかな
359:デフォルトの名無しさん (ブーイモ MMcf-SYdp)
23/05/03 10:14:01.23 HGdhPxDoM.net
GUIDの人やな
360:デフォルトの名無しさん (ワッチョイ 97e5-By2c)
23/05/03 10:27:52.20 vzDzSdqv0.net
いきなり無能だなんだと言い出す言動ですぐわかるな
361:デフォルトの名無しさん (オッペケ Sr8b-/vMP)
23/05/03 10:35:48.95 sp9+jxair.net
>>355
ソレダ!
362:デフォルトの名無しさん (ワッチョイ 1701-E+2s)
23/05/03 11:02:59.86 Fpkn6yKr0.net
ルールってーと、フリーウェア作るときみんなライセンスとかどうしてるの?
いろいろ種類あって何採用していいのかよくわからない
ソース付きで、改変/配布/商用利用好きにしてって場合とかさ
MIT?
363:デフォルトの名無しさん (ワッチョイ ff7b-vJGv)
23/05/03 11:04:19.17 g2t1b8zF0.net
>>358
【License】ライセンス総合【利用許諾】
スレリンク(tech板)
364:デフォルトの名無しさん (ワッチョイ 77e4-ydUa)
23/05/03 11:36:28.25 bhz/zA6o0.net
>>343
これかっこいい
使わせてもらお
365:デフォルトの名無しさん (ワッチョイ 7f79-Wy6e)
23/05/03 12:06:52.63 0fnUMlbu0.net
>>360
実績が伴わないとしょっぱい空気になりそう
でもお前の給料20万じゃん・・・?
的なw
366:デフォルトの名無しさん (ワッチョイ 1701-ef8y)
23/05/03 12:17:42.17 GN2zt4Uy0.net
上で出てる動けばいいじゃん精神よりは億倍マシかと
367:デフォルトの名無しさん (ワッチョイ 9f7f-ExZu)
23/05/03 12:24:06.51 XvXH8q6A0.net
easyかつsimpleがいいならpythonやっとけ
368:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 12:27:13.86 iydNsBEo0.net
動けば良いじゃん精神の方が金は稼げるよ
だってIT技術者でも無い会社経営層は技術持ってても評価しないもん
技術持ってる持ってない関係なしに稼げるシステム作った奴を評価する
つうかこの板使っておいて元の2ちゃんねる作った億稼いだひろゆき自体が動けば良いじゃん精神だぞ
自身の配信でもそう言ってるじゃん
こういう技術どうこう言う技術者は無能ってさw
369:デフォルトの名無しさん (ワッチョイ 375f-Hgfr)
23/05/03 12:31:50.95 6d/7YSFK0.net
そそ、使いもしない単体モジュールの境界テストとか負荷テストとか無駄
トータルできちんと動いてくれればそれで良い
370:デフォルトの名無しさん (スッップ Sdbf-fitb)
23/05/03 12:48:43.53 foxDzL7Ed.net
test
371:デフォルトの名無しさん (ワッチョイ 57ad-0AmK)
23/05/03 13:19:12.96 PpDaqr1l0.net
そんであるとき負荷が掛かったりちょっと改修したときに爆発する
372:デフォルトの名無しさん (ササクッテロリ Sp8b-Hgfr)
23/05/03 13:25:11.18 ll4FWYPGp.net
>>367
改修したらトータルできちんとテストしたら良いだけだろ
373:デフォルトの名無しさん (ササクッテロリ Sp8b-Hgfr)
23/05/03 13:25:47.69 ll4FWYPGp.net
むしろ改修した箇所だけのテストとかあり得ないよな
374:デフォルトの名無しさん (ブーイモ MMbf-SYdp)
23/05/03 13:27:55.56 t3wVQNi7M.net
使いもしない単体モジュールがそもそもなぜあるの?
テストするまでもなく削除すればいいのに
375:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 13:28:01.67 RLCA5WWQ0.net
その「トータルできちんとテスト」ってなんだ?
376:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 13:31:19.49 iydNsBEo0.net
結合テストとかの事やろ
377:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 13:35:10.87 RLCA5WWQ0.net
結合テストすることを「トータルできちんとテスト」って呼ぶ層があるんだ
俺の知らん世界だな…
378:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 13:35:53.83 iydNsBEo0.net
>>370
普通にあるやろ
使うと思ってとか今後の拡張性の為にとかオーバーロード関数用意したけど使われてないとか
特に多いのが今後の拡張性云々とかカスタマイズ用とかってやつ
実際に拡張とかカスタマイズする時に使い物にならなくて設計からやり直す
つまり全くの無駄
379:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 13:39:34.40 iydNsBEo0.net
>>373
結合テストは俺が勝手に言っただけや
でもリリース前ってそれだけじゃ無いじゃん
しかもそれって会社とかでも違うやん
だからどれとは言えないもんやで
俺の会社だと結合テスト以外だと外部にセキュリティテスト依頼したり社内の品管のテストとシステム監査が入る
380:デフォルトの名無しさん (ワッチョイ 975f-VSqy)
23/05/03 13:41:01.73 eaeSSGs50.net
使われないモジュールを書いてしまうおじさんや、非機能要件を無視する(あるいは認識できない)おじさんも淘汰される
381:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 13:45:11.16 RLCA5WWQ0.net
> セキュリティテスト依頼したり社内の品管のテストとシステム監査が入る
こんなテストや監査が想定されてる中、ユニットテストが無駄だって思ってるってこと?
382:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 13:51:12.96 RLCA5WWQ0.net
ちょっとまって!
> 外部にセキュリティテスト依頼したり社内の品管のテストとシステム監査が入る
こんなプロジェクトで「動けばいい」ってスタンスで仕事してんのか?
マジか
383:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 13:51:42.78 iydNsBEo0.net
>>377
俺が言った訳じゃ無いけどなw
まあ俺は単体テストはアリだと思うぞ
単体テストの結果でもって要は作業完了証明やろ
逆に言えば以降は俺の責任じゃ無いと言えるし仕様変更は別に金取れる
384:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 13:53:02.57 iydNsBEo0.net
>>378
そうだぞ
だって製品の検査で調べるのはその動くかどうかじゃん
中のコードがどうとか技術がどうとか関係無いやん
385:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 13:55:01.32 RLCA5WWQ0.net
すごいな。そのプロジェクト
俺の知ってる世界だと、そんなコード見せられたらレビュアーが怒り狂うわ
386:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 13:57:38.37 iydNsBEo0.net
>>381
多分お前が普段使ってる様なアプリもそんなもん
その神経質で無能なレビューアーが関係してるお前のシステムって世界でどんだけ売れてんのって話
387:デフォルトの名無しさん (ワッチョイ 1707-rvTa)
23/05/03 13:59:04.86 7KJ/CzIt0.net
動けばいいとしつこく言ってるやつはただの無職だよ
無職の妄想の中ではそうなんだろうさ
現実には動くのは当然で最低限でしかないんだけどね
388:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 14:03:35.88 iydNsBEo0.net
>>383
そうは言ってるけどじゃあそれ以上に何が必要か言えてないやん
ちなみに話の流れは
>>330
>>333
みたいなコードの内容から来てるんやで
こういうコードが糞だろうが動けば良いって話だから脱線するなよ
お前等っていつも前提間違ってるからなw
389:デフォルトの名無しさん (ワッチョイ bfbc-o+T5)
23/05/03 14:06:31.39 5+L69Iha0.net
まああんまり完璧なコードを書くと、その後の仕事がなくなるからな。
390:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 14:09:44.71 RLCA5WWQ0.net
> 777c-KiN+
ついでに聞くけど、お前の中でシステム監査ってどんなもんなの?
391:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 14:15:23.93 iydNsBEo0.net
>>386
すまん無能の質問の意味が分からん
システム監査って経済産業省とかIPAに定義あるよね
普通はそれに準拠したものが一般的だと思うんだ
つまり共通認識じゃないの?
無能の頭の中って俺俺監査があるん?
392:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 14:19:36.70 RLCA5WWQ0.net
> だって製品の検査で調べるのはその動くかどうかじゃん
こんなこと言ってるし、また俺の
393:シラン世界があるのかと
394:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 14:26:32.08 iydNsBEo0.net
>>388
アホw
まさか動くかどうかが機能要件や非機能要件 セキュリティ要件満たしてないと思ってる?
それこそ最低限満たした上で動く事だよね
その上で中のコードが>>384で言った様な糞コードかどうか関係無いよねって話だ
ほら言った様に話の流れが分かって無い
理解してない
前提を間違ってる
無能だな
395:デフォルトの名無しさん (ワッチョイ 9f4b-gncP)
23/05/03 14:26:49.46 vL8FscsM0.net
GWだねぇ
396:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 14:30:01.23 RLCA5WWQ0.net
>>389
> まさか動くかどうかが機能要件や非機能要件 セキュリティ要件満たしてないと思ってる?
システム監査ってそういうことじゃないぞ
お前の中のシステム監査ってどんなもんなん?
397:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 14:37:49.92 iydNsBEo0.net
>>391
繰り返すアホ
398:デフォルトの名無しさん (スッップ Sdbf-oJ27)
23/05/03 14:42:38.57 s1pMNzuQd.net
>>391
お前が間違ってるんじゃ?
経済産業省のシステム監査基準だとセキュリティガイドライン等に準拠してるか云々って書いてあるしそういう事を監査するもんじゃないの?
399:デフォルトの名無しさん (ワッチョイ ffbb-zzYQ)
23/05/03 14:48:38.92 RLCA5WWQ0.net
俺の知ってる世界だと、システム監査ってのは雑に言うとシステムを体制として担保する方法ができてるかを確認するもの
で、「機能要件や非機能要件 セキュリティ要件」に関連した箇所でいうと、それらの要件が正しく永続的に保証できる証跡が残せるか?って観点で監査される
つまり、
> だって製品の検査で調べるのはその動くかどうかじゃん
ってことにはならんのよ
だから、コーダーが「動けばいい」ってスタンスで仕事してたら、レビュアーが体制としてブチ切れるんだわ
で、お前の中のシステム監査ってどんなもんなん?
400:デフォルトの名無しさん (ワッチョイ 9f2f-g9Ql)
23/05/03 15:09:07.11 fD0yPqm80.net
動けばいいってのは
なぜそう書かないほうが良いのか、ちゃんと理解して説明できないやつの言い訳
まあそう書くなって言ってる奴もちゃんと説明できてないんだがな
401:デフォルトの名無しさん (ワッチョイ ff10-By2c)
23/05/03 15:19:09.40 YldI9T9X0.net
>>390
GW終わって2ヵ月ちょい経つと今度は夏だねぇってなるんだよな
402:デフォルトの名無しさん (ワッチョイ 1f3d-VWCj)
23/05/03 15:26:23.95 49Yy066J0.net
ぼんやりとした質問ですが、
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("URLリンク(web.biz-prog.net));
}
403:デフォルトの名無しさん (ワッチョイ 1f3d-VWCj)
23/05/03 15:26:47.58 49Yy066J0.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が出てきません
404:デフォルトの名無しさん (ワッチョイ ff10-By2c)
23/05/03 16:36:13.15 YldI9T9X0.net
Form1に配置してるWebView2がprivateで宣言されてるからじゃないかね
VS使ってるならデザイナーで選択してプロパティウィンドウのModifiersを確認して
PrivateになってるならInternalかPublicにしたらいいよ
405:デフォルトの名無しさん (ササクッテロリ Sp8b-Hgfr)
23/05/03 16:48:57.57 rOyAnSv/p.net
プライベートのままアクセサ作れば良くね?
406:デフォルトの名無しさん (ワッチョイ bf42-fitb)
23/05/03 17:56:30.72 DnrzKFHb0.net
そもそも素人コーディングをやるやつがマトモなアプリ書けるとは思えん
アプリの作り方を勉強した人ならマシなコード書くからな
407:デフォルトの名無しさん (ワッチョイ 1f3d-VWCj)
23/05/03 19:51:19.18 49Yy066J0.net
>>399-401
解決しました。ありがとうございます。
408:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 21:30:59.09 iydNsBEo0.net
>>394
あのさちゃんと読んだ?
お前は前提を勘違いしてるんだよ
動けば良いってそういう事じゃ無いんよ
409:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 21:35:17.93 iydNsBEo0.net
>>394
もっと分かりやすい例を出そう
例えば同じ処理を100箇所コピペ出実装したとする
普通なら関数化してってやるわな
こんな100箇所コピペした糞コードでもシステム監査や他のテストでは一切問題にならない
動けば良いんだよ
410:デフォルトの名無しさん (ワッチョイ 1707-rvTa)
23/05/03 21:36:12.63 7KJ/CzIt0.net
アスペしつこいな
411:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 21:40:43.87 iydNsBEo0.net
>>405
お前みたいな無能が多くて困ってる
412:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 21:42:02.40 iydNsBEo0.net
もっというと例えばMV系フレームでこの処理はモデルに書くべきだとかどうとか
こういうのもどうでもいい
モデルで書くべきだろうが書くべきで無かろうが
動けば良いんだよ
413:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 21:43:26.02 iydNsBEo0.net
オブジェクト指向もそう
クラス設計がどうだの継承がどうだのどうでもいい
動けば良いんだよ
414:デフォルトの名無しさん (ワッチョイ 777c-KiN+)
23/05/03 21:46:03.28 iydNsBEo0.net
このクラスでカプセル化されてないから云々
どうでも良い
動けば良いんだよ
415:デフォルトの名無しさん (ワッチョイ 3702-ITaW)
23/05/03 21:55:41.82 XU1+7Xhm0.net
触らぬキチに祟りなし
416:デフォルトの名無しさん (オッペケ Sr8b-0AmK)
23/05/03 22:10:57.21 7dxnHkZLr.net
まあ中小規模だと“動けばいい”でやってるのも事実だからなぁ
エクセルにチェックつけてペタペタしてソースは見ないなんてのもザラ
なんならちょっとしたものなら本人が動いてる!で終わりとかね
417:デフォルトの名無しさん (ワッチョイ 7f79-YtWG)
23/05/03 22:36:48.59 0fnUMlbu0.net
>>411
動けばいいよりちょっと良くなると
何が良くなるの?
資料も書かないくせに余計な拡張要素入れたがるやつってぶっ殺したくなるんだけど?
お前もその類?
418:デフォルトの名無しさん (スップ Sdbf-orLb)
23/05/04 01:49:28.43 s0gu/juAd.net
可読性がよくなる
バグが入り辛くなる
後釜がコード読んで罵倒せずにすむ
自分がクソコードに遭遇する可能性が減る
419:デフォルトの名無しさん (アウアウアー Sa4f-ef8y)
23/05/04 03:35:15.40 FCXcO5KQa.net
資料を書く・書かないとコードを改善する・しないは別問題なのになんかキレ散らかしてるの怖・・・
420:デフォルトの名無しさん (ワッチョイ ff10-By2c)
23/05/04 06:46:14.26 gb1C7wFP0.net
なんぞ嫌なことでもあったんだろうw
421:デフォルトの名無しさん (アウアウウー Sa1b-rvTa)
23/05/04 07:31:56.06 iNiPzsH8a.net
糞コード納品してリテイク食らって動けばいいといくら主張しても却下されてここで八つ当たりしてんじゃね
422:デフォルトの名無しさん (ブーイモ MMbf-SYdp)
23/05/04 08:16:56.65 2P3iGn2SM.net
寿命の短いゲームの開発とかには動けばいいだろのメンタリティでコード書いてるやつが多い結構いる
実際クソコードだからバグ修正のアプデでまたバグるのも日常茶飯事
423:デフォルトの名無しさん
23/05/04 10:57:14.77 KzOav63c0.net
オマエらって普段からそんな立派なコード書いてるの?
皮肉でも何でもなく、大手さんの寄越したコードでもネットのサンプルをそのままコピペとか普通にあったんだけど。
アマゾンの AWS 用のサンプルコードとかでも整理なにそれなコードも普通にあるし。
ああいうレベルのものでも水準を満たしていたりするんだろうか。
まあ自分も普段は納品する側の中小だけど。
424:デフォルトの名無しさん
23/05/04 11:02:54.68 vtPK3lgJ0.net
>>1読め
425:デフォルトの名無しさん
23/05/04 12:11:12.80 7U0ATqEaM.net
>>413
ドキュメントでも書いてよ
426:デフォルトの名無しさん
23/05/04 13:12:46.06 nZfQ3MKS0.net
>>418
PSNの個人情報流出思い出した
dobon(だったはず)丸パクリの暗号化だった。"saltは8バイト以上"っていう文字列で復号化できた
オレが作った社内システムも同じことしてた。
社内システムだからセキュリティは気にしてないが。
427:デフォルトの名無しさん
23/05/04 13:16:44.41 mx5edemad.net
>>420
クソコードをドキュメントに起こすときのモチベーション低下もあるな
規則性がないからな
あの頃の俺はなんでこんな変な処理を……
428:デフォルトの名無しさん
23/05/04 15:58:14.71 /htkaizY0.net
>>422
言い訳はいいから書いて
429:デフォルトの名無しさん
23/05/04 16:21:40.44 FCTf23V0d.net
?意味わからん
まさか今から書いて上げろって言ってる?
430:デフォルトの名無しさん (ワッチョイ 9354-ouLR)
23/05/06 20:43:47.65 8uPWyiyX0.net
非同期ファイルコピーのサンプルを探していたら、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;
}
431:デフォルトの名無しさん (ワッチョイ cb10-W4Ad)
23/05/06 22:50:57.94 v1IlMQax0.net
とりあえず機能させたいならFileCopyで十分
中断とか進捗状況確認とか融通が利くのがFileStream
432:デフォルトの名無しさん (ワッチョイ c2bd-O5MS)
23/05/06 23:28:08.83 TzwbEMRu0.net
File.Copyだと同期処理がスレッドを専有しそう。
FileStream.CopyToAsyncだとそうならないように実装されているのかな?
433:425 (ワッチョイ 9354-ouLR)
23/05/07 00:12:10.49 /tWxMywy0.net
>>426-427
ありがとうございます。
FileStream を使うことにしました。
434:デフォルトの名無しさん (ワッチョイ 9354-ouLR)
23/05/07 00:41:03.38 /tWxMywy0.net
>>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' にアクセスできません。'
435:425 (ワッチョイ 9354-ouLR)
23/05/07 00:57:48.70 /tWxMywy0.net
方法 2 (File.Copy) の方法でも発生しました。
まったく原因の見当がつきません・・・
436:デフォルトの名無しさん (ワッチョイ 5eda-xrk/)
23/05/07 00:58:07.18 AUxqabWy0.net
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教えてください
437:デフォルトの名無しさん (ラクッペペ MMde-yLVR)
23/05/07 01:21:55.84 m4wk6w14M.net
onedriveとかgoogledriveとかdefenderとかnortonとか
438:425 (ワッチョイ 9354-ouLR)
23/05/07 01:29:00.89 /tWxMywy0.net
とりあえず原因不明なので、最大10回を上限に、例外発生したらリトライするようにしました・・・
int j = 0;
bool b = false;
while (!b || j < 10)
{
try
{
//コピー処理
b = true;
}
catch
{
continue;
}
j++;
}
439:デフォルトの名無しさん (ワッチョイ 9354-ouLR)
23/05/07 01:37:17.63 /tWxMywy0.net
>>432
Windows Defender 無効にしたら例外が発生しなくなりました!
天才さんありがとうございます!(>▽<)
440:デフォルトの名無しさん (オッペケ Src7-KeI6)
23/05/07 08:06:15.51 ZcKb5BN5r.net
>>431
DB絡んでないけど一般論としては
URLリンク(atmarkit.itmedia.co.jp)
もっともODBCドライバとかDBプロパイダの作りがザルだとクエリ実行結果を一気に全件取り出して
アプリサーバ上のメモリ上に保持してる可能性もゼロではないけど、postgresならそんなことはないだろう
実体化したくないけど非同期でレコードを取り出したいってことなら
await foreach( var row in query.AsAsyncEnumerable() )
441:デフォルトの名無しさん (ワッチョイ 5eda-xrk/)
23/05/07 11:06:44.59 AUxqabWy0.net
>>435
ありがとうございます。
ToList()やToListAsync()はすべての結果が利用可能になるまで何も返されない、つまり
大量レコード処理には向かない
(B)の場合でもAsNoTracking()をつけて変更検知をOFFにしないと
Linq to DBがキャッシュしてしまいメモリ使用量が大きくなる
(B)でさらにI/Oをブロックしたくない場合、非同期ストリームを利用する
ということで大量レコードをチビチビ処理する場合は
async foreach( var row in query.AsNoTracking() )
という書き方に落ち着きました
他の参考URL
URLリンク(stackoverflow.com)
URLリンク(stackoverflow.com)
442:デフォルトの名無しさん (ワッチョイ 5eda-xrk/)
23/05/07 11:09:18.20 AUxqabWy0.net
ミス
最終的に
async foreach( var row in query.AsNoTracking().AsAsyncEnumerable() )
という書き方に落ち着きました
443:デフォルトの名無しさん (ワッチョイ 4679-U4yn)
23/05/07 11:24:15.43 4ZIcGn3M0.net
終わるまでにめっちゃメモリ使って死ぬ感じある
444:デフォルトの名無しさん (ワッチョイ 1279-y4C+)
23/05/07 14:06:12.41 O0op5Uvp0.net
Defenderやらが邪魔するのはそうなんだろうけど
C/C++でACLや属性変更でリトライなんてしてた覚えないからC#のDisposeでファイルがちゃんとクローズできてないだけな気もする
445:デフォルトの名無しさん (ササクッテロリ Spc7-Z7Ea)
23/05/08 10:05:23.91 3mw2N0vvp.net
Disposeでクローズなんかしないだろ?
つかそんな実装頼みの使い方してたら痛い目に遭うぞ
446:デフォルトの名無しさん (ワッチョイ b7e5-tcUg)
23/05/08 13:04:12.03 h5IiweHd0.net
using制御しかしてないわ
447:デフォルトの名無しさん (スプッッ Sd52-8wHc)
23/05/08 13:11:33.93 x7lJRSufd.net
>>439-441
>>429はWidows Defenderのせいにして終わってるから
納得できる形で解決してみせてよ
448:デフォルトの名無しさん (ササクッテロリ Spc7-Z7Ea)
23/05/08 13:27:23.81 Rh3bbmbap.net
>>442
非同期なら当たり前に発生するなw
449:デフォルトの名無しさん (ラクッペペ MMde-yLVR)
23/05/08 13:29:30.54 QcInbmeDM.net
ファイルを閉じるから横取りされるんだぞ
450:デフォルトの名無しさん (スッップ Sd32-KeI6)
23/05/08 13:38:05.76 TxJAG0JMd.net
今回みたいなケースでファイルクローズ直後にファイルいじろうとすると使用中の様な警告出ることあるから
基本的にリトライするようなコード入れてるけどそんなことないのかね
451:デフォルトの名無しさん (ササクッテロリ Spc7-Z7Ea)
23/05/08 13:53:31.24 xSxPowKip.net
OS側の処理も非同期なんだと予想
452:デフォルトの名無しさん (スプッッ Sd52-8wHc)
23/05/08 15:24:20.83 NYRttg47d.net
いちいちリトライなんか仕込んてたらハゲそう
イラネーヨって言ってくれ
453:デフォルトの名無しさん (ワッチョイ c2bd-O5MS)
23/05/08 23:17:00.86 n3psyKuA0.net
>>440
IDisposableを継承しているのにクローズしなかったら使い物にならないだろ。
例えばFileStreamクラスのDispose()には、
Stream によって使用されているすべてのリソースを解放します。
とあるので、当然Closeもする。
454:デフォルトの名無しさん (ワッチョイ c2bd-O5MS)
23/05/08 23:18:14.32 n3psyKuA0.net
あ、継承じゃなくて実装だ。
455:デフォルトの名無しさん (ワッチョイ cb7c-DUGT)
23/05/09 04:40:15.34 fisd8t0i0.net
Disposeの処理の中でClose普通に呼んでたはず
ソース見りゃ分かるやろ
456:448 (ワッチョイ c2bd-O5MS)
23/05/09 04:54:39.15 b+hc+8Ui0.net
>>450
>>440が「そんな実装頼みの」って言ったので、あえてソースを見ずにドキュメントの内容で答えた。
457:デフォルトの名無しさん (アウグロ MMb3-G648)
23/05/09 07:21:46.18 2h4Q3q9eM.net
asyncawaitに対応してない何かがあるのかもな
458:デフォルトの名無しさん
23/05/09 08:53:33.61 F+qDabIr0.net
自作じゃない.NET純正で、Taskを返す〇〇Asyncメソッドがasyncawait対応してないは無いでしょ
459:デフォルトの名無しさん
23/05/09 10:25:27.81 wTiHbcrZp.net
だから、OSだって非同期にファイル処理してるんだろ?
で、完了通知なんて受けて無いw
460:デフォルトの名無しさん
23/05/09 11:26:49.94 TDrxScizd.net
C#のファイル操作が遅いからファイルコピーと属性変更との間にWindowsDefebderが割り込んでスキャンされて妨害されるのかもしれない
知らんけど
461:デフォルトの名無しさん
23/05/09 11:28:32.40 LwvaBWbia.net
>>455
win32apiを使ってるのでさすがにそれなはい
削除してもすぐにファイルが消えないのはあるあるだからリトライするのが定番
462:デフォルトの名無しさん
23/05/09 11:46:04.35 vAJE1vUCr.net
とはいえ
頻度は10回に1回あるかないか程度
Windows Defender 無効にしたら例外が発生しなく
なら妥当かもしれない
463:デフォルトの名無しさん
23/05/09 16:21:49.31 GXFqLAgP0.net
>>429
これ閉じる前にFileStream.SafeHandle使ってSetLastWriteTime(SafeFileHandle, DateTime)のオーバーロード使うのはどうなの?
464:デフォルトの名無しさん
23/05/09 20:43:33.82 ZCATFg/N0.net
質問なんですが
formのbutton1.textをテキストボックスから取得したいのですが、
テキストが長い場合、ボタンのテキストが改行されてしまいます
表示が後半隠れてしまうのは別に構わないのですが、
改行がおこるとテキストがボタンの上側に移動してしまいます
button1.textを改行しないようにできないでしょうか?
465:デフォルトの名無しさん
23/05/09 22:36:11.30 ZhePtJGs0.net
ボタンのPaintイベントで自前描画すればOK
466:デフォルトの名無しさん (ワッチョイ 1279-y4C+)
23/05/09 22:41:53.48 U2HEifZi0.net
button1.AutoEllipsis = true;
467:デフォルトの名無しさん (ブーイモ MMdb-mskx)
23/05/10 10:41:28.62 B1N+exWkM.net
どなたか教えてください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 {クラス名}を書き忘れたらビルドが通っていたのでなんだろうと思った所存です
468:デフォルトの名無しさん (ワッチョイ b74f-hGOv)
23/05/10 11:20:13.56 iQXLAALm0.net
オブジェクト初期化子
1つ目のケースは初期化するプロパティがないので何もしない
2つ目のケースはこれと同じ意味になる
var p = new Person();
p.Name.NameText = "";
URLリンク(ufcpp.net)
469:デフォルトの名無しさん (ワッチョイ 52de-KeI6)
23/05/10 11:21:23.96 tkTpg3dz0.net
>>460
レスありがとう、Paintイベント追加で自力でやるのはけっこう大変そうですね
>>461
ありがとう、...省略はできたけど、文字は上側に寄ったままでした
button1.Padding.Topに4ぐらいいれたら解決しました
470:デフォルトの名無しさん (ブーイモ MMdb-mskx)
23/05/10 11:27:39.61 NYVeTygZM.net
>>463
なるほど!ありがとうございます!
いやーこれはコンパイル時に落としてほしい…
471:デフォルトの名無しさん (ワッチョイ ff2d-vOwS)
23/05/10 11:28:45.20 qs6QvCEc0.net
Formsで独自描画はバッドノウハウに近いと思う
スケーリング考慮してないのばっかり
472:デフォルトの名無しさん (ワッチョイ b74f-hGOv)
23/05/10 13:49:34.03 iQXLAALm0.net
>>465
AのコンストラクタでNameがnewされてたら問題ないわけだし使い分けでしかないね
nullableを有効化しとけばこのケースだとAのNameがnull許容でもnull非許容でも警告出してくれるよ
473:デフォルトの名無しさん (ワッチョイ c23d-Lyct)
23/05/10 14:23:44.58 6sAnxqBz0.net
C#でASP.NETでHTMLコード書くにはどこいじればいいの?
474:429 (ワッチョイ 9354-ouLR)
23/05/10 17:05:27.60 QPN4FwhI0.net
私にとっての解決後も議論があったようですが、
Windows Defender を無効化 ( Windows Defender の [除外] に、コピー先フォルダを登録する ) してから、1回も発生していません。
for(int i = 0; i < 100; i++){}
での 100回ループテストを何度か行っても発生していないので、自分の中では解決済みになっています。
475:デフォルトの名無しさん (ササクッテロル Spc7-Z7Ea)
23/05/10 18:11:17.94 rAs2Y7NDp.net
ファイル内容変更したからウイルスチェックが走ってんじゃん
ってオチかよw
476:デフォルトの名無しさん (ワッチョイ 1610-tcUg)
23/05/10 18:54:24.51 6aE3wdSe0.net
オチかよも何も、最初からそういう話だったのに
DisposeがちゃんとやってないんだろとかOSの遅延がうんたらとか頭でっかちが騒いでるだけやで
477:デフォルトの名無しさん (ワッチョイ 4679-jUDw)
23/05/10 18:59:46.60 KHK6MiQv0.net
asyncawaitってスレッドセーフのメソッドじゃなくても使っていんだっけ?
478:デフォルトの名無しさん (アウアウウー Sac3-16n5)
23/05/10 19:16:24.65 PlKEk/pSa.net
>>456で結論書いてやったのにまだやってたのか
479:デフォルトの名無しさん (ササクッテロル Spc7-Z7Ea)
23/05/10 19:57:37.80 n33wvc2tp.net
>>473
全く結論になって無いよあれ
単なる対症療法なだけだろw
480:デフォルトの名無しさん (アウアウウー Sac3-16n5)
23/05/10 20:01:05.91 PlKEk/pSa.net
その対症療法が唯一の治療法なんだがまだそれもわからないのかよw
481:デフォルトの名無しさん (アウアウウー Sac3-16n5)
23/05/10 20:03:31.18 PlKEk/pSa.net
リソースを占有できるのがそのスレッドだけではない場合
つまり今回と同様の場合だな
原因がセキュリティソフトかバックアップソフトか何かは全く関係ない
時間を置いて何度かリトライしてそれでもだめなら例外を投げる
基本中の基本だぞ?
482:429 (ワッチョイ 9354-ouLR)
23/05/10 20:19:03.60 QPN4FwhI0.net
議論再燃させて申しわけありません。
消えます。
483:デフォルトの名無しさん (ワッチョイ 4679-jUDw)
23/05/10 21:49:28.98 KHK6MiQv0.net
みんな参加できるし
いい内容だと思う
484:デフォルトの名無しさん (ワッチョイ 1610-tcUg)
23/05/10 22:26:34.42 6aE3wdSe0.net
>>1
> 議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
485:デフォルトの名無しさん (ワッチョイ ff2d-vOwS)
23/05/10 23:13:27.93 qs6QvCEc0.net
>>475,476
今回の場合(>>429)は、ファイルを一旦解放するのが問題なんだから、>>458の方法で上手く行くでしょ
486:デフォルトの名無しさん (ワッチョイ ff2d-vOwS)
23/05/10 23:27:09.51 qs6QvCEc0.net
ファイル削除のことならリトライは必要だけど、今回のと関係ないね
487:デフォルトの名無しさん (ワッチョイ 335f-Z7Ea)
23/05/10 23:39:29.79 +U2L2taI0.net
てか、ファイル操作するのに、排他しなきゃだよな?
一度手放したら他のプロセスに横取りされちゃうだろ
488:デフォルトの名無しさん (ワッチョイ 335f-LLT0)
23/05/10 23:54:07.74 of34847N0.net
もう一度再現させた上でロックしているプロセスが本当にWindows Defenderだったのか確認しない限り不毛な議論では?
489:デフォルトの名無しさん (ワッチョイ 4679-U4yn)
23/05/11 02:59:54.64 YOUU3VFS0.net
っていうかどうしたいんだろ
コピー後のファイルを
誰かがつかんだままにすれば
似たようなエラーはいつでも
起こせるし起きちゃうじゃん
それがこのアプリにとってレアケースでないなら他アプリがつかんだママのときの動作を仕様で定義するべきだと思う
490:デフォルトの名無しさん (ワッチョイ ff2d-vOwS)
23/05/11 03:21:28.69 rPH4vL1P0.net
>>484
>>429のソースを見るに、ファイルの最終書き込み時刻を保ったままコピーしたいんでしょうよ
コピー先のファイル作成とタイムスタンプ操作を1回の排他モードオープン~クローズの間にまとめてやれば
他のプロセスに割り込まれようが無いし、その後につかまれてもやること終わってるから問題無い
491:デフォルトの名無しさん
23/05/11 08:30:37.64 deoSAjL+a.net
>>481
今回のセキュリティーソフトわ切るやり方こそ対症療法だろw
492:デフォルトの名無しさん
23/05/11 10:12:30.60 NldGOlLod.net
>>458
これ知らなかったんだけど、実際に存在する?
コード書いてもでてこないんだけど
ちなみにGetLastWriteTime はあるようだ
493:デフォルトの名無しさん
23/05/11 10:37:35.73 rPH4vL1P0.net
>>487
.NET7で追加された
.NET6以前はP/InvokeでWin32API使えば同等のことは出来るけど時刻の扱いが面倒臭いね
494:デフォルトの名無しさん
23/05/11 10:44:53.88 ihHVpLbGp.net
そもそもファイルのタイムスタンプを合わせる仕様が本当に必要なのか小一時間
495:デフォルトの名無しさん
23/05/11 10:54:15.13 NldGOlLod.net
>>488
thx
>>489
他人の仕様にケチ付けちゃだめ
496:デフォルトの名無しさん
23/05/11 11:24:35.10 ihHVpLbGp.net
タイムスタンプなんて危ういものを何に使おうってんだ?
生成時刻が重要ならファイル名に組み合わせしまうとか
他の方法の方がよっぽど確実だぞ
497:デフォルトの名無しさん
23/05/11 12:16:13.48 RpUziWGf0.net
DateTime.ToFileTimeみたいな関数あったはずだからWin32利用したら案外簡単
498:デフォルトの名無しさん
23/05/11 12:31:50.44 NldGOlLod.net
コードも提供せずにこういうことやりたいと言ってるわけでもないし、
今回問題となっている部分についてだけで話すればいいんじゃないの
質問者が他のやり方ないですかみたいな質問ならまだしも
回答者が勝手に仕様かえて変な回答しないほうがいいと思うなぁ
499:デフォルトの名無しさん
23/05/11 12:45:05.52 OsVl9AaP0.net
俺は基本更新時刻の新しい順で並べるからファイルやフォルダのコピーごときでファイルスタンプは変わって欲しくないな
500:デフォルトの名無しさん
23/05/11 12:56:38.62 CPAv1ED5M.net
コピー元のタイムスタンプを維持したいユースケースなんていくらでもあると思うんだけどな
cp -pのように最初からそういうオプションが用意されてないのが不思議なくらい
501:デフォルトの名無しさん
23/05/11 13:00:19.05 8tWYoMH60.net
>>491
お前の考えなど知らん
コピー先のファイル名はそのままである必要があるんだよ
502:デフォルトの名無しさん
23/05/11 13:03:05.25 azf3P6SKM.net
あれ、File.Copy()でコピーすればファイルの更新時刻とかはコピー元ファイルのままだと思ってたんだけど、違うの?
わざわ�
503:エLastWriteTimeを転記する処理なんか不要じゃないかな
504:デフォルトの名無しさん
23/05/11 13:20:41.79 YOUU3VFS0.net
結局なんで死んでんだっけ?
スレッドセーフじゃないメソッド呼んでたから?
505:デフォルトの名無しさん
23/05/11 13:22:58.00 Kl8HQqiW0.net
FileStreamを開放したところでDefenderに掴まれてるから
506:デフォルトの名無しさん
23/05/11 13:26:07.70 IsUfqIsW0.net
>>470
ノートン先生が毎回俺がコンパイルしたexe没収しやがるのな
507:デフォルトの名無しさん
23/05/11 13:28:13.33 /kketneYM.net
gdriveの横槍でvsのビルド失敗しやがるからな
508:デフォルトの名無しさん
23/05/11 14:04:15.95 /lX/zRJGp.net
>>496
だからファイル作成時刻が重要ならタイムスタンプに頼る様な仕様は事故のもとだから仕様から考え直さないと後で泣くのはおまえさんとこだって話だw
509:デフォルトの名無しさん
23/05/11 14:06:17.73 IsUfqIsW0.net
ファイルの作成時刻が大事で、ファイル名も変えたくないなら
実データの内に時刻もっておいて逐次参照するしかないか
510:デフォルトの名無しさん
23/05/11 14:15:18.91 5HC1/c5B0.net
タイムスタンプをバージョン番号にするのが一時流行ったな
511:デフォルトの名無しさん
23/05/11 14:18:46.36 NldGOlLod.net
>>497
コード提供部分にはない仕様でコピー中の進捗管理もしたいからブロックコピーみたいな事したいんじゃないのと思ってるけどね
512:デフォルトの名無しさん
23/05/11 16:32:36.54 Kl8HQqiW0.net
ファイルコピーツールでタイムスタンプ類もそのままって普通のことでは?
513:デフォルトの名無しさん
23/05/11 16:59:27.45 OsVl9AaP0.net
そうだよ
その当然のことがC#だとなぜか上手くいかないねってマヌケな話を続けてるのよ
514:デフォルトの名無しさん (ワッチョイ b7e5-tcUg)
23/05/11 17:30:13.71 Kl8HQqiW0.net
違うよ、Defenderに割り込まれて失敗してただけなのに、C#が悪いとか実装だよりがうんたらとか明後日の話してるだけ
あとなぜかタイムスタンプ同期を敵視するおかしな輩
515:デフォルトの名無しさん (ササクッテロル Spc7-Z7Ea)
23/05/11 17:43:23.58 rQf2HOBdp.net
タイムスタンプって言えば、マイナンバーの他人データ事件
516:デフォルトの名無しさん (アウアウエー Saaa-tcUg)
23/05/11 20:37:45.66 WmrOv4hCa.net
asp.net 7.0/razorでTest.razorファイルを作って中身を
@page "/test/{text}"
<h1>Hello, world!</h1>
とすると、URLリンク(localhost)は期待通りTest.razorにアクセスするんだけど
URLリンク(localhost) にアクセスしようとするとエラーページ(app.razorの<NotFound>)に飛んでしまいます
エラーページに飛ばずにTest.razorに導くにはどうしたらいいのでし
517:デフォルトの名無しさん (アウアウエー Saaa-tcUg)
23/05/11 20:50:19.55 WmrOv4hCa.net
自決。重複指定できるんだね
@page "/test/{text}"
@page "/test/"
518:デフォルトの名無しさん (ワッチョイ 4679-jUDw)
23/05/12 05:08:25.71 wvdezX0Z0.net
ループしつつ例外来たらリトライぐらいしかないんだな
ファイルアクセスって
519:デフォルトの名無しさん (ワッチョイ 1610-tcUg)
23/05/12 06:06:11.81 knxa7qRm0.net
絶対に他のプロセスがアクセスすることが無いファイルでもなきゃそうだろうね
520:デフォルトの名無しさん
23/05/12 10:06:17.76 6p7rgQrNp.net
一度握ったら離さない様にすれば良いだけ
まあ、握るまで待つ事はあるだろうけどさ
521:デフォルトの名無しさん
23/05/12 10:09:45.59 6p7rgQrNp.net
ファイルロックくらいしろって事でFA
522:デフォルトの名無しさん (ワッチョイ 5eda-xrk/)
23/05/12 20:52:48.39 QyvjIFa10.net
タイムリーな話題
Microsoft Defender がファイルコピー速度を大幅に低下させるというテスト結果
URLリンク(security.srad.jp)
523:デフォルトの名無しさん (ワッチョイ cfa7-55dJ)
23/05/13 11:11:48.89 tW4K4KGI0.net
当たり前の話じゃないの?
アンチウイルスって実行ファイルの中身チェックするのが仕事なんだし
524:デフォルトの名無しさん (ワッチョイ cfbb-ScEU)
23/05/13 12:02:01.86 7xfulSMu0.net
>>517
コピーされるファイルも実行ファイルの中皆の?
525:デフォルトの名無しさん (ワッチョイ 137c-Zn+e)
23/05/13 12:58:27.54 WLwqntQA0.net
別にチェックするのは実行ファイルだけじゃ無い
基本的には全部
拡張子変えて実際は実行ファイルって場合も有る
特殊な方法で画像や音声ファイルに別ファイルを入れる事も出来る
普通に開いても画像や音が流れるけどやけにファイルサイズ大きい
526:デフォルトの名無しさん (ワッチョイ 03e5-Phjm)
23/05/13 14:46:09.37 mZrGEceU0.net
除外指定されてないもの全部検査対象だよな
527:デフォルトの名無しさん (ワッチョイ ffde-ZkZz)
23/05/13 15:08:50.76 xlpBDV6S0.net
んでウィルスでもないものも消していってくれるし
528:427 (ワッチョイ bfbd-Np+b)
23/05/14 08:52:03.33 kc3awa8x0.net
>>428
非同期I/Oについて以前別件で調べていたページをブラウザで開いたまま放置してて、
そこを読んだら、
・FileStreamは~Async()メソッドを呼ぶだけだと、同期メソッドをTask.Runしているイメージと同じ
・非同期IOにするには、FileStreamのコンストラクターでuseAsyncをtrueにする
とあった。
529:デフォルトの名無しさん (ワッチョイ 8f79-PTT8)
23/05/14 11:04:56.63 8prSF4JO0.net
そもそもIOって物理的に非同期にできんのかな?
って疑問はある
ファイル名(パス)を変更するとして
それが既存と被らないことをチェックするためには
HDD全部が排他対象になっちゃうと思うんだけど・・・?
世の中には頭のいい人がいるからな
Windowsもうまいことなってるのかもしれん
530:デフォルトの名無しさん (ワッチョイ 137c-Zn+e)
23/05/14 11:24:11.66 C7+mn9jn0.net
アホすぎる
基本情報技術者試験からやり直せ
531:デフォルトの名無しさん (アウグロ MMdf-PTT8)
23/05/14 11:25:33.88 YHEEjM6QM.net
>>524
マジで?載ってる?
532:デフォルトの名無しさん (ドコグロ MMe7-GJof)
23/05/14 11:30:50.36 cZZGCVt9M.net
FileStreamの~Async()メソッドの話をしているのに
ファイル名を変更する話をし始める人
533:デフォルトの名無しさん (ワッチョイ 8f79-LM5x)
23/05/14 13:29:51.43 8prSF4JO0.net
>>526
あ、そっか
やっぱりそこは
どうにもならねえんだよな
534:デフォルトの名無しさん (ワッチョイ 8f79-LM5x)
23/05/14 13:35:41.81 8prSF4JO0.net
まずIOいじるときは
プロセスセーフである必要があって
それをサポートするAPIはないと
次にスレッドセーフである必要も
あってそこはAPIがあるのと
プロセスセーフの仕組みに載せてしまってもよい
みたいな?
535:デフォルトの名無しさん (スップ Sd1f-ZkZz)
23/05/14 15:32:18.00 cBUUr2ypd.net
別に考えるのは悪いことじゃないけどここで書くような事か?
チラシにでもかけよ
536:デフォルトの名無しさん (ワッチョイ cfa7-55dJ)
23/05/14 16:46:00.64 AbKJzFQD0.net
>>523
出来るも何もむしろ必須レベル
正常なディスクであればファイルIOは即終わるが壊れかけとかだとめちゃくちゃ時間かかる事もある
要するに完了時間は不定だから多数に公開しようとしたらファイルIOはWin32のオーバーラップを利用した非同期化は必須
C#であれば手軽に使えるasync版もあったはずだが
537:デフォルトの名無しさん (ワッチョイ 8f79-cPXU)
23/05/14 18:25:49.02 8prSF4JO0.net
>>530
なんかごちゃごちゃうっせーけど
OSとAPIに任せて勝手にやってくれるわけではないよね?
538:デフォルトの名無しさん (ワッチョイ 1310-TD+p)
23/05/14 19:42:00.49 LqBBoBzl0.net
やってくれてなかったらOSもプロセスもディスクアクセスのたびに死んでるわ
539:デフォルトの名無しさん (ワッチョイ 8f79-cPXU)
23/05/14 21:25:59.89 8prSF4JO0.net
>>532
だから死んでるじゃん
エラー出して
ハンドリングはしてないよね?
540:デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz)
23/05/14 21:34:27.06 pb1Dbmn7M.net
スレ伸びてるなと思ったら荒れてたのか
スルーしたほうがいいのかな?答えたほうがいいのかな?
541:デフォルトの名無しさん (ワッチョイ 1310-TD+p)
23/05/14 23:37:37.55 LqBBoBzl0.net
ハンドリングしてるからエラー出せるんだろうに
542:デフォルトの名無しさん (ワッチョイ a32d-QNcS)
23/05/14 23:52:11.86 TlAvKTIL0.net
デバイスとファイルシステムの区別が付いてないし基本的な知識が欠けてる
相手にするだけ無駄かと
スレチだし
543:デフォルトの名無しさん (ワッチョイ ff2f-o00x)
23/05/15 01:10:46.89 LL0MvYiW0.net
まあふらっとだしC#にかかわる範囲で答えてやれば良いとは思うが
そもそも>>523は非同期IOってどんなもんだと思ってるんだ
544:デフォルトの名無しさん (ワッチョイ 8f79-PTT8)
23/05/15 03:01:17.91 MbkFonvu0.net
>>535
プロセスセーフにはならないってことだよね
545:デフォルトの名無しさん (ワッチョイ 8f79-PTT8)
23/05/15 03:14:56.69 MbkFonvu0.net
streamreaderwriterで死ぬってことはOSの機能じゃなくて
あくまでアプリ側がそう組んだからそう動くってことでおk?
546:デフォルトの名無しさん (ワッチョイ cfa7-55dJ)
23/05/15 10:50:41.17 pV2Ms8mh0.net
>>531
勝手にやってくれない?
お前はDeviceIOControlでも利用して一々マニュアルでハードウェア制御してるのかよ
普通に全部勝手にやってくれるよ
547:デフォルトの名無しさん (ワッチョイ ff80-wac6)
23/05/15 15:46:46.09 rEJ0AvWA0.net
ReactiveExtensionsって現場では結構使われてるんですかね?
548:デフォルトの名無しさん (ワッチョイ bfbd-Np+b)
23/05/15 23:44:43.69 7dwhbD/A0.net
>>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のライブラリがどこまでやっているのかまだソースをほとんど調べていない。
549:デフォルトの名無しさん
23/05/16 15:21:40.99 x5Idn1prM.net
>>542
ReadFileEx()/WriteFileEx()に対して何かアドバンテージあるの?
550:542
23/05/16 23:17:52.90 ArIN9ivM0.net
>>543
ReadFileEx()/WriteFileEx()のlpCompletionRoutineを使ったことはないけど、
LPOVERLAPPED_COMPLETION_ROUTINEのページに、
システムが完了ルーチンを呼び出すたびに、アプリケーションのスタックの一部が使用されます。 完了ルーチンが追加の非同期 I/O とアラート可能な待機を行うと、スタックが大きくなる可能性があります。
とあるから、完了ルーチンでさらに非同期I/Oを繰り返すと、スタックがあふれる恐れがあるんじゃないかなあ?
551:デフォルトの名無しさん
23/05/17 00:05:39.06 UJN2K8xqM.net
>>544
なるほど
.NETのFileStreamもReadFile()やWriteFile()を使ってるのはそれが理由かも
552:デフォルトの名無しさん (ワッチョイ 835f-keH4)
23/05/17 02:11:11.09 BW67Dsb50.net
ファイルIO飽きたぁ
553:デフォルトの名無しさん (ワッチョイ cfa7-55dJ)
23/05/17 09:38:13.97 J+vPZ/2W0.net
>>545
いや完了ルーチン内で更に完了ルーチン呼び出しするなんて実装メリット無さ過ぎて普通しないからそれが理由ではない
単純に最も効率的な非同期IOはスレッドプールを利用した完了ポートだからだよ
C#のasync awaitも完了ポートベース、nodejsもWindows版では完了ポートベース
554:デフォルトの名無しさん (ワッチョイ 8f79-cPXU)
23/05/17 09:41:37.77 x4D/IoKq0.net
>>546
どうした?
実はこれまで組んだファイル周りの実装がまずいことに気が付いたのか?
プロセスセーフまで保証しろって言われたら正直俺もやってねえ
っていうかもっかいやってくれればええやんってポリシー
だったけどこのスレ見たやつが指摘してきた(笑)
面倒くせえw
555:デフォルトの名無しさん (ワッチョイ cfa7-55dJ)
23/05/17 09:47:10.85 J+vPZ/2W0.net
プロセスセーフってなんだ?
一つのファイルを複数プロセスで扱う場合においても別に難しい事はないけどな
排他モード指定したら良いだけなんだから
556:デフォルトの名無しさん (ササクッテロ Sp87-eWQc)
23/05/17 09:52:57.56 BC9U1gYmp.net
>>549
一度に完了しないでチマチマ複数回アクセスする類いだろ
557:デフォルトの名無しさん (ワッチョイ 8f79-cPXU)
23/05/17 09:56:54.00 x4D/IoKq0.net
>>549
いや、他のやつにアクセスされてると死ぬねん
その時いつまで待てばええのか仕様がないねん
タイムアウト付けるとじゃあその時できんかった処理をいつやるのか仕様を考えろって言われて辛いねん
さらにそれが終わる前に他の処理が進んでしまってもまずいときあんねん
こんなレアケース相手にしとうなかったねん
558:デフォルトの名無しさん (ワッチョイ cfa7-55dJ)
23/05/17 10:04:34.84 J+vPZ/2W0.net
>>551
それファイルIOの問題ではないな
非同期プログラミング全般の問題
559:デフォルトの名無しさん (ササクッテロ Sp87-eWQc)
23/05/17 10:04:36.01 BC9U1gYmp.net
まあ、昨今のマイナンバー絡みの誤配信あるし
つまらないレアケースを突いて来る奴増えたよな
560:デフォルトの名無しさん (ワッチョイ 8f79-cPXU)
23/05/17 10:07:50.36 x4D/IoKq0.net
いい手を考えた
それってこの間作ったやつも
同じですよね?
解決しているのであれば
対策方法を教えてほしいです
って比較的暇そうな
プロジェクトも誘爆させてみる
561:デフォルトの名無しさん (ワッチョイ 13e5-zI38)
23/05/17 10:20:18.08 r4L2F7830.net
元々はファイルクローズ直後に約10%程度日付の書き換えに失敗するという質問で
原因はDefenderと結論付けて解決している
対策はリトライ、検索除外、ファイルを閉じる前に日付を書き換えるなどが上がっている
なお非同期書き込みは関係ない
562:デフォルトの名無しさん (ワッチョイ ff2f-3DBk)
23/05/17 10:26:42.10 GG5VHMy50.net
>>551
レアケースでもなんでもなくて、当然設計段階で考慮しとくべき話
コーディング以前の問題
>>553
レアケースでも、それが発生する可能性がある以上、発生したらどうするか考えとかないとダメ
エラーで落とすとかどうもしないとかも含めてな
つかマイナンバーのやつは、レアケースというほどレアな条件が重なってるとは思えん
たんなる設計不良とテスト不足だろ
563:デフォルトの名無しさん (ササクッテロ Sp87-eWQc)
23/05/17 10:27:49.23 BC9U1gYmp.net
>>555
Defenderが変化のあったファイルを即握るから一度手放したら持って行かれるってのが原因だよ?
この場合Defenderは一例に過ぎない、他に同じ様なプロセスが走ってたら同じ事