ふらっと C#,C♯,C#(初心者用) Part144

レス数が950を超えています。1000を超えると書き込みができなくなります。
2019/07/16(火) 15:36:23.74ID:i1fbuZ/pM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part143
https://mevius.5ch.net/test/read.cgi/tech/1558002486/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/10/03(木) 01:26:24.07ID:wBmuAStK0
非同期メソッドの実行自体は慣れたけど
win10のアップデート強制再起動時に
非同期処理中のタスクをきちんと終了させる方法がわからん

突然書き込み中のファイルがぶっ壊れそうで怖いわ
2019/10/03(木) 01:35:18.06ID:z1GHd6rla
>>875
ありがとうございますm(_ _)m
2019/10/03(木) 01:39:57.58ID:dygVDi5Yd
>>875
工場の制御ってRS-232CとかPLCとかGPIBとかやろ
別にアンマネージド必要ないだろ
879デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/03(木) 01:45:45.89ID:pRlPv1jza
>>878
そうかもしれないけど拡張ボードの型式でライブラリはアンマネージドdllだけかもしれない。
USB接続でアンマネージドdllの可能性もある
何とも言えない
2019/10/03(木) 15:11:12.65ID:xDvwVpv4p
マネージドなドライバーが無いなら使わないって選択をだな。
2019/10/03(木) 18:33:07.86ID:65+5RZIm0
UI操作とawaitを使った非同期メソッドをまとめたasyncメソッドを別スレッドから呼び出すにはどうすればいいですか?
2019/10/03(木) 18:36:08.92ID:XDm3DYNpd
>>881
??何が聞きたいの?
2019/10/03(木) 18:42:35.24ID:65+5RZIm0
>>882
すみませんでした。
例えばこういう感じのメソッドを別スレッドから呼び出す方法を教えてください。

async Task DoSome()
{
label1.Text="処理中...";
await DoLong();
label1.Text="完了";
}
2019/10/03(木) 20:27:59.44ID:AKImZpfb0
正直設計を考え直した方がいいけど
メインスレッドで動作してる間に
TaskScheduler.FromCurrentSynchronizationContext()
でTaskScheduler確保しておいて、その"別スレッド"内で
new Task(() => DoSome()).RunSynchronously(taskScheduler)
する
2019/10/03(木) 20:48:28.97ID:Cd3mzBuJ0
こうじゃダメなの?
Invoke((MethodInvoker)(async () =>DoSome()));
2019/10/03(木) 22:23:35.99ID:Y5r0apvPr
呪文化しただけにも見える
2019/10/04(金) 00:31:32.74ID:hyuh0V300
メソッド側を修正する必要があるけど、
こういうことでは?

別スレッドからのUI操作
https://qiita.com/mounntainn/items/8a2b4f1cf47bd02657f3
888デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/04(金) 01:26:24.02ID:oVLixzTMa
>>883
やっぱりそういうのは非UIスレッドからも呼び出せるようにする、ではなく、
逆に普通にUIスレッド専用のメソッドとして提供して、
もし必要ならXMLコメントとかで「UIスレッド以外からの呼び出し禁止」って
明示するのが筋なような気がするw
2019/10/04(金) 09:42:07.42ID:7JHQ1IR60
>>884
>>888
filesystemwatcherのハンドラから呼び出すと別スレッドからの呼び出し扱いになってしまいます。
2019/10/04(金) 09:50:12.44ID:K3mQ1Iatp
まあその用途ならやっぱコントロールのInvokeの中で呼べばいいだけの話しだな
DoLongの中でさらに入り組んでるとデッドロックしそうだけど
891デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/04(金) 14:31:48.61ID:RxmXvWZXa
こんなの考えてみたが、あんまり便利でもないなw
private bool TryOnUIThread<T>(EventHandler<T> eh, object sender, T e) where T:EventArgs
{
  if (!InvokeRequired) return false;
  Invoke((Action)(() => eh(sender, e)));
  return true;
}

private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
  if (TryOnUIThread(FileSystemWatcher_Changed, sender, e)) return;
  var t = DoSome();  
}
2019/10/04(金) 15:21:51.76ID:5G6hsRzp0
FileSystemWatcherはSynchronizingObject持ってんじゃん
設定しとけば勝手にBeginInvokeでイベントハンドラ呼んでくれるよ
2019/10/05(土) 10:15:38.99ID:hjSAU91p0
質問なんですが
設定ってどこにどうやって保存してますか?
.configが今ならベストなんでしょうが、保存先が
C:\Documents and Settings\UserName\Local Settings\Application Data\
になり、.iniのように、アプリをコピーで2つの設定が使えるようになりません

.configはファイルの場所が遠くて変更しにくい、iniは古くてC#で扱いにくい
どうしてますか?
2019/10/05(土) 10:23:45.47ID:BObIlSOA0
>>893
インストールするアプリはユーザーデータフォルダのどっかに保存しないと駄目じゃん
どこでも置けるやつはexeと同じ階層に設定ファイルあったほうが使いやすいじゃん
ってだけしか気にしたことない
2019/10/05(土) 10:30:58.10ID:hjSAU91p0
>>894
れすさんくすです
確かにそのとおりだとおもいます

インストーラーではなく、ZIPとかで配布で、ちいさなアプリで、主にシングルユーザーで
ってなると.iniになるんでしょうか?
2019/10/05(土) 10:31:02.26ID:elsuYLim0
>>893
設定を保存するクラスを作って、xamlかjsonにシリアライズ
アプリのコピーで使い分けるなら、保存場所はアプリのexeと同じフォルダー
2019/10/05(土) 10:34:16.80ID:BObIlSOA0
>>896
xmlとjsonなんて編集できるツールあるの?
パンピーにインデント壊さないでねなんて無理よ
2019/10/05(土) 10:43:34.43ID:elsuYLim0
>>897
元の質問に設定ファイルを手動で編集したいなんて書いてないが
899デフォルトの名無しさん (ワッチョイ b67c-MsYi)
垢版 |
2019/10/05(土) 10:47:20.84ID:xk/GxZ7j0
jsonもxmlもインデント関係ないから自由にさせろ
強制したいならyaml使え
2019/10/05(土) 12:25:09.61ID:8Jk2Tveb0
>>897
インデントわろた
2019/10/05(土) 12:42:35.73ID:sqkLDT76d
>>897
インデントwwww
2019/10/05(土) 15:47:01.45ID:BObIlSOA0
インデントっていうかカッコの対応?
でもその一点でxmlとjsonっておよびじゃ無くない?
これらを使うなら設定ツールが必要になると思う
2019/10/05(土) 16:03:44.47ID:8Jk2Tveb0
よく出てこれたな
2019/10/05(土) 16:30:09.26ID:BObIlSOA0
>>903
何度でも言えるよ
xmlとjsonは設定ツールがないと使えないゴミ
2019/10/05(土) 16:44:26.62ID:LN1PiSPK0
設定画面ぐらい作れよ
2019/10/05(土) 17:02:10.69ID:8Jk2Tveb0
>>904
よおインデント
2019/10/05(土) 17:07:55.98ID:hjSAU91p0
>>896
れすさんくす
結構ハードなことやってるんだね、一度クラス作ったら一緒か
2019/10/05(土) 17:16:21.03ID:q6cvuv6U0
>>906
よおインシデント
2019/10/05(土) 17:17:03.15ID:JDr+zhso0
>>907
今どきならjson.netを使うだけ
ググればわかるけど呆れるほどかんたんだよ
2019/10/05(土) 18:01:24.61ID:vEDwovccd
インポテンツ
2019/10/05(土) 18:06:22.26ID:PVJcrjgV0
初心者スレやからね
2019/10/05(土) 19:34:08.92ID:hjSAU91p0
>>909
さんくす、ライブラリが公開されてるのか
みんなこれ使ってるの?
2019/10/05(土) 19:36:45.83ID:1kVSHcIG0
令和の時代の新規プロジェクトでiniファイルはありえんだろw
2019/10/05(土) 19:38:02.29ID:1kVSHcIG0
>>912
今のところデファクトスタンダードなライブラリだね
2019/10/05(土) 19:39:42.31ID:BObIlSOA0
>>913
設定ファイルをユーザにどうして欲しいの?
2019/10/05(土) 19:46:18.14ID:1kVSHcIG0
>>915
サンプルのjsonを添付してここを変更しろとドキュメント付けとけば問題ない
インデントが変わっても問題ないし
917デフォルトの名無しさん (エムゾネ FF0a-MsYi)
垢版 |
2019/10/05(土) 19:51:52.36ID:kB6gz2T/F
>>913
http://www6.uniovi.es/cscene/CS3/
values.c
2019/10/05(土) 19:56:00.01ID:8wZmV3QG0
>>912
俺はDataContractJsonSerializerだな
これなら標準ライブラリだからインストール不要
2019/10/05(土) 19:57:33.02ID:BObIlSOA0
>>916
jsonはカッコの対応で死ぬわ

っていうかxmlもjsonもiniファイル駆逐できるほど性能よくねーじゃん
っていうか用途が違うものを強引に適用しようとしてない?
設定ファイルに書いたコメントも消えちゃうしね
2019/10/05(土) 20:01:44.88ID:BObIlSOA0
iniファイルを時代遅れだと主張するなら
xmlやjsonで吐き出して設定ツールぐらい用意しろってことかな?
それなら理解できるけど
xmlとjsonのテキスト編集はキツイ
2019/10/05(土) 20:08:26.65ID:1O88xYRBd
ユーザーがやることはjsonの値をちょい変更するくらいなのになんでカッコ対応が問題になるんだよ
ユーザーがカッコを書く必要なんてないのに
2019/10/05(土) 20:11:42.09ID:BObIlSOA0
>>921
いや、だからそれどこよ?
ってのを見つけるのも結構骨が折れる作業よ

だから、コメントをjsonファイルに書いておくだろ?
ところが次のアプリの書き込みで消えてるんだなw
923デフォルトの名無しさん (ワッチョイ 3a2d-BBXA)
垢版 |
2019/10/05(土) 20:13:16.91ID:jRdA7zB80
話はよーわからんが、JSONに慣れれない人もそれがあんたの能力なんだから
しょうがないんじゃない
2019/10/05(土) 20:13:46.83ID:WowcC4IHr
>>922
ちゃんとしたエディターかIDE使えば?
VScode使えば対応簡単だけど
まさかメモ帳でやってんの?
2019/10/05(土) 20:16:05.57ID:BObIlSOA0
そもそもバグったときに凶悪であることは認めるだろ?
俺らだってxmlやjsonファイルでユーザーが編集したおかしな箇所を
プログラムでピンポイントで指摘できない
このファイルは完璧でないと読めない
そんなモノをユーザーに触らせるような運用は間違っている

客がいいって言うならいいけど
2019/10/05(土) 20:16:19.70ID:WowcC4IHr
vscodeとかtsとかnode.jsとか設定はjsonだけど
それで大問題にはなってない
みんな使いこなしてる
何故君だけ使えない?

iniファイルなんて実際死んでるよ?
2019/10/05(土) 20:16:43.74ID:BObIlSOA0
>>924
それを客に言うの?
趣味ならいいけど
2019/10/05(土) 20:17:55.69ID:WowcC4IHr
>>927
客がなんでjsonファイルいじって中にコメント書くのかが分からん
お前がいつまでボケ続けるのか興味があるが…
2019/10/05(土) 20:18:25.25ID:BObIlSOA0
>>928
え?開発者向けなん?
2019/10/05(土) 20:19:04.85ID:r/LR5Bg3d
iniファイルとかWin16の時代の化石だろ
2019/10/05(土) 20:19:40.75ID:WowcC4IHr
本当にいつまでボケ続けるのか
実務に携わってないんだろうなってのはわかる
空転を本人が気づいてない
932デフォルトの名無しさん (ワッチョイ 3a2d-BBXA)
垢版 |
2019/10/05(土) 20:20:51.17ID:jRdA7zB80
よく出てくくる、一本道コードのVisual Basicおじさんでしょ
2019/10/05(土) 20:21:03.98ID:BObIlSOA0
はっきりさせておくけど

・設定ファイルをテキスト編集でユーザに触らせたい
→xmlやjsonは向かないんじゃない?

・設定ファイルをユーザに触らせない
→なんでもいいんじゃない?

ってことな
2019/10/05(土) 20:22:45.53ID:BObIlSOA0
あともう一つ

・ユーザは開発者である
→なんでもいいんじゃない

って感じな
2019/10/05(土) 20:24:09.45ID:WowcC4IHr
・設定ファイルをテキスト編集でユーザに触らせたい

の時点で間違ってる
バックアップすら取るかどうかわからんやつらに編集させんな馬鹿
2019/10/05(土) 20:24:53.35ID:hjSAU91p0
>>914
なるほど、これはもうjson.netいれるしかないですね

>>918
MS謹製のJson、これはかなりとっつきやすそうさんくす
2019/10/05(土) 20:25:02.19ID:BObIlSOA0
>>935
じゃあ、俺と君の意見は一致してるね
2019/10/05(土) 20:25:51.75ID:WowcC4IHr
ボケた会社の〜ボケた開発者が〜ボケた客にボケたことをさせて〜

メンテナンス費用だけとるつもりですか〜

死ね糞ゴミ!
939デフォルトの名無しさん (ワッチョイ 3a2d-BBXA)
垢版 |
2019/10/05(土) 20:28:30.38ID:jRdA7zB80
でも、初心者なのに仕事を取ってくる勇気は大したもんだよね
2019/10/05(土) 20:38:04.30ID:8wZmV3QG0
>>933
俺なら
>・設定ファイルをテキスト編集でユーザに触らせたい
→そんな仕様にはしない
なぜならあらゆるフォーマットに対応する実装とテストなんてしたくないし
そもそも設定をテキスト編集するアプリとか使いにくい

>・設定ファイルをユーザに触らせない
→xmlにする
なぜなら実装が簡単だし、開発者(俺)ならテキスト編集できるから
2019/10/05(土) 20:51:43.64ID:RYV31rLj0
レガシーコードってなんかかっこいいから、どんどん増やすべき。
伝説の武器みたいなものでしょう。
942デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/05(土) 21:28:22.83ID:Apziqq2fa
>>936
2chだとやたらとJSON推しの人が多いけど、.NET標準のシリアライザは他にもいろいろあるよw
JSONに固執する必要がないなら他を検討した方がいいと思うけど
2019/10/05(土) 21:40:37.42ID:kmFdI7ZBM
MSがJSON推しだからね
2019/10/05(土) 21:42:52.25ID:mrk3SroR0
JSONは連想配列に順序の保証がない
デバッグで差分比較するとかができない
2019/10/05(土) 21:45:37.47ID:ZEfzfdRr0
連想配列に順序ってそんな重要なんか
2019/10/05(土) 21:50:21.48ID:SzWcISg6d
>>942
.NET標準でjson以外にほかにいろいろシリアイザがあるって、XML以外何かある?
2019/10/05(土) 21:54:42.26ID:hjSAU91p0
>>942
なるべくネット上に解説とかサンプル多いと楽かなっと
多数派に流されるお
2019/10/05(土) 22:05:26.81ID:VWTAP42j0
json schema用意すればvscodeで補完効くし、間違いも指摘してくれるし、普通json使うわ
949デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/05(土) 22:54:13.79ID:Apziqq2fa
DataContractJsonSerializer、使ったことなかったが調べた感じ
一通りの機能はあるし、バージョントーレラントみたいだし、別にこれでもいいねw

バージョントーレラントじゃないと思ってたが、勘違いだったみたいだ。
2019/10/05(土) 23:34:01.62ID:1i4Kj4Snd
トーレラントって何かググってみたけど中華鍋しか出てこない
2019/10/06(日) 01:39:32.41ID:z+z4mE1D0
確かにJsonはコメントが書けないか
コメント用の文字列メンバを予め確保すれば良いのかな
2019/10/06(日) 01:49:26.58ID:DPash9Py0
jsonのシリアライザ/デシリアライザは送受同じライブラリを使わないと、割とめんどい。
DateTimeの扱いとか。

あとライブラリによってはpublicクラスじゃないとダメとか変な制限があるものも・・

DataContractJsonSerializerは変換遅いし、いちいち[DataContract]や[DataMember]などのアノテーションがめんどい
2019/10/06(日) 02:10:45.36ID:uOvq13Pn0
以前REST APIを作ったときはVisual Studioがjson.netを利用するコードを自動生成してたけど、今はDataContractJsonSerializer化されてるのかな?
2019/10/06(日) 07:22:38.42ID:DbrcOQgy0
>>953
System.Text.Json
955デフォルトの名無しさん (ワッチョイ b67c-WcZE)
垢版 |
2019/10/06(日) 11:26:53.05ID:yc9LKsYB0
>>939
http://software.aufheben.info/kouza/kouza_socket.html

>936
cjson
2019/10/06(日) 12:18:55.28ID:jjEkd1/A0
windows formsアプリについての相談なんですけれど、ロジックと見た目を分けろって聞くじゃないですか。なのでそうしようと思ったんです

例えばユーザーコントロールを作って、そこに何かしらの処理を行うボタンを配置したとします
それで自分が考えたのは、計算をするクラスをユーザーコントロールクラスの内部クラスとして作る、ユーザーコントロールクラスのフィールドとしてその計算するクラスのインスタンスを持たせる
でボタンが押されるイベントで計算をするクラスのオブジェクト.calculate()みたいにする

設計としてはこんな感じでも大丈夫ですかね?アプリを作る時に内部のコードはこう実装するみたいなことを教えてくれる本が無くてどう設計していけばいいのかわからないんです
2019/10/06(日) 12:29:48.44ID:ofI4YMfJM
右も左もわからないうちから俺俺アーキテクチャとか考えないで

MVCやMVVMでも勉強したらいいと思うよ

それから最強のアーキテクチャを考えるのでも遅くない
2019/10/06(日) 12:31:03.82ID:U/2g+4lB0
>>956
>ロジックと見た目を分けろ
windows formsアプリじゃなくWPFやった方がいいんじゃない?
windows formsでそんな組み方するの逆にめんどくさい
2019/10/06(日) 13:48:38.81ID:wAV7A9/e0
>>955
cjsonはわかりやすいのかな、ちょっとしらべてみるさんくす
2019/10/06(日) 13:52:51.65ID:44yIwJmG0
>>956
そんなことしなくて良い
画面アプリなんて使い捨て上等

サーバーサイドと画面(クライアント)を分けろって話で
一つのアプリでそんなことやっても無意味
2019/10/06(日) 14:51:46.94ID:BLgAYnXt0
そんな訳は(規模にもよるけど)当然無い。
2019/10/06(日) 15:03:12.76ID:Ih3UpniZ0
「既存メソッドの処理なんですが?ちょっと時間かかっちゃうんですよねー
プログレスバーとかつかないですかね?
処理の進行状況も表示して」

こんな簡単な要望ですら
そいつはケツまくって逃げ出すよ
花京院の魂を10000個ぐらいかけてもいい絶対だ

処理と表示は一見関係ないように見えて実は密接に関係していて
絶対に切り離せない

不可能なことを可能だと言う技術者を信用してはならない

何年もやっていてこの程度の因果関係もわからんような雑魚から
教えを請いてはならない
963デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/06(日) 15:33:01.89ID:ZrFisUz2a
>>956
何でユーザーコントロールの話になるのかよく分からんけど、

>ユーザーコントロールクラスの内部クラスとして作る
この部分は変だけど(内部クラスにする必然性がない)、その後の部分はそういう認識でいいと思うよ。

FormでもUserControlでも、基本的に書いていいのは上に乗ってる
コントロールを操作するコードとイベントハンドラだけ。
2019/10/06(日) 18:11:15.25ID:SEX7i46w0
>>962
C#にはIProgress<T>というクラスもタスクも横断的に使える便利なIFがあるから
あんたが思っているようなことはない

つか、偉そうなのにこれ知らないのか?
2019/10/06(日) 18:45:20.34ID:pgF6GacOr
自分は頭が悪すぎてIProgress<T>のどこが便利なのかわからないので
違う仕組みでやってる
2019/10/06(日) 19:21:15.12ID:Ih3UpniZ0
>>964
はぁ?
既存の何も考えずに作ったメソッド(内部)のプログレスバー(表示)を分離したまま実装できないだろってのが俺のレスの主旨なんだけど
理解した上で反論しようとしてんの?
Mr.ドン・キホーテ?
2019/10/06(日) 19:26:16.12ID:SEX7i46w0
>>966
いや、簡単に実装できるよ
君が知らないだけで
2019/10/06(日) 19:36:10.31ID:Ih3UpniZ0
>>967
あっそ、絶対無理なのにバカだなお前
テメーはさっさと技術者やめて詐欺師に看板替えろ
2019/10/06(日) 19:38:07.20ID:fpn8B7qc0
昔はイベントハンドラで実装してたな
いまならObservablePropertyあたりでやるんかねRxとかどうも上手く使えてる気がしない
2019/10/06(日) 19:43:10.12ID:fpn8B7qc0
>>968
いやできるだろう
2019/10/06(日) 19:53:20.87ID:SEX7i46w0
>>969
確かにmvvmだとReactiveProperyを上位に伝搬するのが楽だし俺もそうやっている
でもFormsの話のようだからIProgress<T>を出しました
2019/10/06(日) 20:02:50.65ID:dGqjDCnwr
FormsだとしてもIProgressは不便だと思うよ
2019/10/06(日) 20:07:52.17ID:DbrcOQgy0
>>972
なぜ?
2019/10/06(日) 20:18:09.12ID:LuDxacSca
ID:Ih3UpniZ0って昨日iniファイル以外認めないって主張してた御仁か
15〜20年くらい前のスキルしかもちあわせてない人でしょ
技術的なキャッチアップも人間性の向上も怠って年齢だけ重ねてる人だからこういう物言いしかできないんだろう

こういう人のいうことは表向きだけはいはいって聞いたふりして全部無視して問題ないよ
2019/10/06(日) 20:27:29.93ID:dGqjDCnwr
ほっとくとイベントの参照が残ってるのでひとりでに消えなくなってしまう
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況