「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
探検
ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/12/15(土) 10:46:07.45ID:Wu4Fx0bU336デフォルトの名無しさん
2020/03/04(水) 11:18:37.67ID:TuAQ3w56 >>334、335
わかりにくくてすみません
IoTデバイスとの通信はTPCIP上で独自のアプリケーションプロトコルが規定されてて、それに従います
それをやる通信用のプロセスと別建ての業務用のプロセスの間でもデータのやりとりを行う必要があるのですが、IPCはどうやって普通は実現してるのかがC#を使う上でわかっておりません
わかりにくくてすみません
IoTデバイスとの通信はTPCIP上で独自のアプリケーションプロトコルが規定されてて、それに従います
それをやる通信用のプロセスと別建ての業務用のプロセスの間でもデータのやりとりを行う必要があるのですが、IPCはどうやって普通は実現してるのかがC#を使う上でわかっておりません
337デフォルトの名無しさん
2020/03/04(水) 11:37:01.00ID:nNNW6i++ プロセス間通信って、共有メモリみたいな奴か?
338デフォルトの名無しさん
2020/03/04(水) 11:58:57.18ID:TuAQ3w56 >>337
他にも組み合わせて使うと思いますが、その通りです。
他にも組み合わせて使うと思いますが、その通りです。
339デフォルトの名無しさん
2020/03/04(水) 12:31:07.29ID:TuAQ3w56 ど素人め、定番はこれだって回答がすぐにないのは
ひょっとすると、プロセスごとにわけて機能を作り込むような考え方はWindowsというかC#というかわからないですが、一般的ではないのでしょうか?
ひょっとすると、プロセスごとにわけて機能を作り込むような考え方はWindowsというかC#というかわからないですが、一般的ではないのでしょうか?
340デフォルトの名無しさん
2020/03/04(水) 12:55:31.61ID:RbQqNGaU 触っちゃいけない人だったか
341デフォルトの名無しさん
2020/03/04(水) 13:05:25.33ID:TuAQ3w56 >>340
私の書いた文はわかりにくいかもしれませんが、そのご指摘はどういう意味なのでしょうか?
私の書いた文はわかりにくいかもしれませんが、そのご指摘はどういう意味なのでしょうか?
342デフォルトの名無しさん
2020/03/04(水) 13:37:21.24ID:SkBOTqi1343デフォルトの名無しさん
2020/03/04(水) 13:43:31.55ID:pkFzTgEj 普通の方法があるんじゃなくて目的に応じて複数の方法があるという当たり前の話なだけなので
普通の普通の連呼されてもこんな方法もあるよって情報が増えるだけやぞ
既にもらった情報で自分の目的に合致するのか一旦実践した方がいいんじゃねえの
なんか最初のレス見る限りメモリマップトファイルとかウィンドウメッセージで事足りる話に見えるが
普通の普通の連呼されてもこんな方法もあるよって情報が増えるだけやぞ
既にもらった情報で自分の目的に合致するのか一旦実践した方がいいんじゃねえの
なんか最初のレス見る限りメモリマップトファイルとかウィンドウメッセージで事足りる話に見えるが
344デフォルトの名無しさん
2020/03/04(水) 13:57:38.59ID:ITD9wOqz 元々のSocketはプロセス間通信用
SockAddr の AF_UNIXがそれ。
Windowsは長い間、AF_UNIXをサポート
していなかったが、去年ぐらいからwin10で使えるようになっている。(デスクトップとWSLの場合)
いつディスコン喰らうか判らない高位ライブラリーを使うか、
自分に技術蓄積がある(?)下位ライブラリーを使うかの判断はケースバイケースでしょぅね
幸運を
SockAddr の AF_UNIXがそれ。
Windowsは長い間、AF_UNIXをサポート
していなかったが、去年ぐらいからwin10で使えるようになっている。(デスクトップとWSLの場合)
いつディスコン喰らうか判らない高位ライブラリーを使うか、
自分に技術蓄積がある(?)下位ライブラリーを使うかの判断はケースバイケースでしょぅね
幸運を
345デフォルトの名無しさん
2020/03/04(水) 14:38:19.70ID:TuAQ3w56346デフォルトの名無しさん
2020/03/04(水) 17:35:15.89ID:/myb4o4P いろいろとアドバイスしてくれてる人たちに
ど素人め
と罵倒したのはなんだったの?
ど素人め
と罵倒したのはなんだったの?
347デフォルトの名無しさん
2020/03/04(水) 18:01:30.38ID:TuAQ3w56 >>346
ははは
そう解釈されましたか
識者「ど素人め、定番はこれだ」
私 なるほどー
という意味で書いたのですが、誤読を誘発してしまいましたね
私が他者へど素人めと言ってるわけではなく、識者ならこんなフワフワした質問は、パッと答えてくれるかなと思って書いたのです
ははは
そう解釈されましたか
識者「ど素人め、定番はこれだ」
私 なるほどー
という意味で書いたのですが、誤読を誘発してしまいましたね
私が他者へど素人めと言ってるわけではなく、識者ならこんなフワフワした質問は、パッと答えてくれるかなと思って書いたのです
348デフォルトの名無しさん
2020/03/04(水) 18:01:58.08ID:VYRn8ATr 346
それは誤読
それは誤読
349デフォルトの名無しさん
2020/03/04(水) 18:19:39.77ID:yiNVycVp >>325
>通信を行うプログラムと業務用にオペレータからの操作とその他を担うプログラムにわけて作ろうと思っています。
プロセスとかプログラムを分けて作りたい理由って何なの?
書いてる内容だけだとライブラリ化すれば十分なように思えるけど
>通信を行うプログラムと業務用にオペレータからの操作とその他を担うプログラムにわけて作ろうと思っています。
プロセスとかプログラムを分けて作りたい理由って何なの?
書いてる内容だけだとライブラリ化すれば十分なように思えるけど
350デフォルトの名無しさん
2020/03/04(水) 18:32:10.50ID:TuAQ3w56 >>349
機能が違うのが一番の理由です
設計するにあたって、通信の機能は独自のプロトコルがあるのでそれなりに考慮しなきゃいけないことが多くて、通信に専念させたいのですね
業務用のプロセスは、こちらはこちらでUIがありますので、通信を行う機能とは考察しなきゃいけないところが違います
また、両者の動作タイミングが全く違うこともありますね
機能が違うのが一番の理由です
設計するにあたって、通信の機能は独自のプロトコルがあるのでそれなりに考慮しなきゃいけないことが多くて、通信に専念させたいのですね
業務用のプロセスは、こちらはこちらでUIがありますので、通信を行う機能とは考察しなきゃいけないところが違います
また、両者の動作タイミングが全く違うこともありますね
351デフォルトの名無しさん
2020/03/04(水) 18:41:49.49ID:SkBOTqi1 機能が違うだけならプロジェクト分けてdll化すればよいだけなので、
普通に考えれば不特定多数(いやらしい言い方だけど)からのアクセスが要件なんでしょうたぶん
知らんけど
普通に考えれば不特定多数(いやらしい言い方だけど)からのアクセスが要件なんでしょうたぶん
知らんけど
352デフォルトの名無しさん
2020/03/04(水) 18:49:53.82ID:TuAQ3w56 >>351
動作タイミングが違いますので、dll化では実現できないと考えています。
一つのプロセスで実現するにはマルチスレッド化せざるを得ないと思うのですが、そうすることは暗黙でみな承知している事柄なのでしょうか?
マルチスレッドでもマルチタスクでも似たような考察点はあるのでどちらを採用しても作成する難易度は大差ないのだとは思いますが、知識が余りに不足しており、マルチスレッドスレッド化したプロセスのデバッグは私では困難極まりないとも考えています。
動作タイミングが違いますので、dll化では実現できないと考えています。
一つのプロセスで実現するにはマルチスレッド化せざるを得ないと思うのですが、そうすることは暗黙でみな承知している事柄なのでしょうか?
マルチスレッドでもマルチタスクでも似たような考察点はあるのでどちらを採用しても作成する難易度は大差ないのだとは思いますが、知識が余りに不足しており、マルチスレッドスレッド化したプロセスのデバッグは私では困難極まりないとも考えています。
353デフォルトの名無しさん
2020/03/04(水) 18:56:27.09ID:SkBOTqi1 >>352
アクセスさせる相手が常に同じならプロセス間通信なんてまどとっこしいことを
する意味はないような気がする。
マルチスレッドはもちろん落とし穴いっぱいだけど、過度に恐れる必要はないし
そこまで難易度高くないと思う。
アクセスさせる相手が常に同じならプロセス間通信なんてまどとっこしいことを
する意味はないような気がする。
マルチスレッドはもちろん落とし穴いっぱいだけど、過度に恐れる必要はないし
そこまで難易度高くないと思う。
354デフォルトの名無しさん
2020/03/04(水) 18:58:21.75ID:SkBOTqi1 少なくとも自分はプログラミング始めて半年でも普通に使ってましたよw
355デフォルトの名無しさん
2020/03/04(水) 19:04:15.58ID:GfItxBVT スレッド間通信だって、プロセス間通信だって同じことじゃん
プロセスを分けたからって通信にだけ専念するなんて造りにはできない
通信タスク⇔アプリタスク
と並列に動く2つのタスクの接点処理を作ってやらないと動かないぞ
プロセスを分けたからって通信にだけ専念するなんて造りにはできない
通信タスク⇔アプリタスク
と並列に動く2つのタスクの接点処理を作ってやらないと動かないぞ
356デフォルトの名無しさん
2020/03/04(水) 19:08:19.47ID:TuAQ3w56 >>353
ありがとうございます
考え方ですね
勿論、通信と業務双方まとめて考察できてモノシリックな作りに出来たらそれはそれで良いのだと思います。
通信機能は状態遷移に従って色々やらせる事があるので、業務用の機能と合わせて考察するのは、私にはなかなか難しいのです。
ちなみに、可能でしたらご教示頂きたいのですが、マルチスレッドのプログラムのデバッグ手法はどのようなものでしょうか
webや良書など、参考にされたものがありましたら教えていただけませんでしょうか
マルチタスクのプロセス構成で、どうしてもsemaphore的な扱いの部分で考え落ちのバグがあり、状態遷移に基づいて試験してもバグをかなり流出させてしまったことがありまして。
勿論、分岐網羅や境界値分析で一通り全ての試験をこなしてはいたのですが
まして未経験のスレッドだとどうなるやらわからず二の足を踏んでおります。
ありがとうございます
考え方ですね
勿論、通信と業務双方まとめて考察できてモノシリックな作りに出来たらそれはそれで良いのだと思います。
通信機能は状態遷移に従って色々やらせる事があるので、業務用の機能と合わせて考察するのは、私にはなかなか難しいのです。
ちなみに、可能でしたらご教示頂きたいのですが、マルチスレッドのプログラムのデバッグ手法はどのようなものでしょうか
webや良書など、参考にされたものがありましたら教えていただけませんでしょうか
マルチタスクのプロセス構成で、どうしてもsemaphore的な扱いの部分で考え落ちのバグがあり、状態遷移に基づいて試験してもバグをかなり流出させてしまったことがありまして。
勿論、分岐網羅や境界値分析で一通り全ての試験をこなしてはいたのですが
まして未経験のスレッドだとどうなるやらわからず二の足を踏んでおります。
357デフォルトの名無しさん
2020/03/04(水) 19:12:25.31ID:TuAQ3w56 >>355
ありがとございます
それはその通りです
機能ごとに作るのは、仰っている接点をキチンと作ることでもあります。
通信した結果をなんらかのIPC機能を使って業務用のプロセスに通知、逆に業務用のプロセスからの指示を通知するように明示しておきたいのです
一種の責任分界点としての役目もありますね
ありがとございます
それはその通りです
機能ごとに作るのは、仰っている接点をキチンと作ることでもあります。
通信した結果をなんらかのIPC機能を使って業務用のプロセスに通知、逆に業務用のプロセスからの指示を通知するように明示しておきたいのです
一種の責任分界点としての役目もありますね
358デフォルトの名無しさん
2020/03/04(水) 19:18:43.16ID:GfItxBVT そもそも通信タスクとアプリタスクってどっちが親なん?
アプリタスクの常駐処理って何やってるの?
通信タスクに最新データが来たら通知して欲しい?
アプリタスクが通知タスクの受信バッファを定期で確認する?
アプリタスクの常駐処理って何やってるの?
通信タスクに最新データが来たら通知して欲しい?
アプリタスクが通知タスクの受信バッファを定期で確認する?
359デフォルトの名無しさん
2020/03/04(水) 19:18:54.88ID:E+0JWbBM ガガイのガイジ
360デフォルトの名無しさん
2020/03/04(水) 19:20:34.90ID:w6hLhDKv >>347
少なくとも340はそう捉えて、突然罵倒する危ない人なんだなと感じたんだと思うよ
俺は正しく解釈したけど340に対するレスがずれてたんでもしかして340の解釈が正しかったのか?と勘ぐっちゃった
少なくとも340はそう捉えて、突然罵倒する危ない人なんだなと感じたんだと思うよ
俺は正しく解釈したけど340に対するレスがずれてたんでもしかして340の解釈が正しかったのか?と勘ぐっちゃった
361デフォルトの名無しさん
2020/03/04(水) 19:22:05.72ID:uE9oMay2 てか実際にローカル同士の対話なのかそこすらハッキリ情報出してねえだろ
要件の定まらねえフワフワした質問にはフワフワした回答しかこねえよ
要件の定まらねえフワフワした質問にはフワフワした回答しかこねえよ
362デフォルトの名無しさん
2020/03/04(水) 19:30:41.74ID:TuAQ3w56 >>358
親子関係は特に考えていませんね
24時間運用することを想定してます
業務用のプロセスはデバイスの稼働状況とセンシングしてるデータのモニタリング、及びそれらの蓄積。
必要に応じてデバイス(のさらに先にいる装置)に対してある種の指示を行うことを想定してます。
センシングしてるデータはそのまんまではなく、モニタするときには簡単な加工(FFT程度)して表示させるつもりです。
業務用のプロセスは、可能だったらポーリングではなく、イベントドリブンな形で受信を契機に即座に表示してほしいのです。
親子関係は特に考えていませんね
24時間運用することを想定してます
業務用のプロセスはデバイスの稼働状況とセンシングしてるデータのモニタリング、及びそれらの蓄積。
必要に応じてデバイス(のさらに先にいる装置)に対してある種の指示を行うことを想定してます。
センシングしてるデータはそのまんまではなく、モニタするときには簡単な加工(FFT程度)して表示させるつもりです。
業務用のプロセスは、可能だったらポーリングではなく、イベントドリブンな形で受信を契機に即座に表示してほしいのです。
363デフォルトの名無しさん
2020/03/04(水) 19:34:47.36ID:mhPO8lOa 親子なんか意識する必要ないしなあ。
悪いがここ馬鹿ばかりだから相談しても無駄だぞ。
悪いがここ馬鹿ばかりだから相談しても無駄だぞ。
364デフォルトの名無しさん
2020/03/04(水) 19:39:28.76ID:x9n6fSic365デフォルトの名無しさん
2020/03/04(水) 19:47:15.17ID:yCw8CYmc モノシリですね判ります
366デフォルトの名無しさん
2020/03/04(水) 19:48:21.42ID:K/lPlqdw ちょっと、見返してみましたが、もはやc#そのものとかなり離れた会話になってしまいました
すみません
c#で実装するため、下らない質問でも書いて良いスレと書いてあったので、このスレに書いてしまいましたが、あまり相談するにあたり適切だとは言えない内容となってしまいました
長々とこれ以上続けるのも申し訳ないので、この辺りでやめておくことにします
ご教示頂いた方、ありがとうございました
すみません
c#で実装するため、下らない質問でも書いて良いスレと書いてあったので、このスレに書いてしまいましたが、あまり相談するにあたり適切だとは言えない内容となってしまいました
長々とこれ以上続けるのも申し訳ないので、この辺りでやめておくことにします
ご教示頂いた方、ありがとうございました
367デフォルトの名無しさん
2020/03/04(水) 20:07:19.28ID:SkBOTqi1 揚げ足取りだけどmonolithicねw
これおじさん世代に間違って覚えてる人多し
これおじさん世代に間違って覚えてる人多し
368デフォルトの名無しさん
2020/03/04(水) 20:14:20.76ID:4LAYe0JO369デフォルトの名無しさん
2020/03/04(水) 20:26:04.25ID:5mLImXyq >>362
だったら通信開始した時点で他の処理は動いて欲しくないんだから
別プロセスなんかにする必要ないじゃん
問題起きるだけだよ
また通信が途中で死んだとき
途中までダウンロードしたデータどうするの?
また、その後のアプリの動作はどうしたい?(最新が取れるまで完全に止めたい?古いデータで動かしたい?)
とか色々ある仕様を決めて
初めて別プロセスにするって仕様が決まるんであって
わかりにくいから分けちゃったは余計面倒で複雑になっちゃうぞ
別プロセスにしたいなんて受信自体はアプリが死んでても生きててもいつでも動いてほしくてとにかく受信バッファを素早くいつでも処理してほしい的な
要望でもないとやらないよ
だったら通信開始した時点で他の処理は動いて欲しくないんだから
別プロセスなんかにする必要ないじゃん
問題起きるだけだよ
また通信が途中で死んだとき
途中までダウンロードしたデータどうするの?
また、その後のアプリの動作はどうしたい?(最新が取れるまで完全に止めたい?古いデータで動かしたい?)
とか色々ある仕様を決めて
初めて別プロセスにするって仕様が決まるんであって
わかりにくいから分けちゃったは余計面倒で複雑になっちゃうぞ
別プロセスにしたいなんて受信自体はアプリが死んでても生きててもいつでも動いてほしくてとにかく受信バッファを素早くいつでも処理してほしい的な
要望でもないとやらないよ
370デフォルトの名無しさん
2020/03/04(水) 20:37:11.14ID:4LAYe0JO371デフォルトの名無しさん
2020/03/04(水) 20:52:38.13ID:Yqjto87s372デフォルトの名無しさん
2020/03/04(水) 20:55:56.28ID:5mLImXyq 仮に
通信タスクが通信し受信バッファに溜め込んで
アプリタスクが受信バッファを定期で見に行く造りにした場合
・通信タスク受信バッファ書込中(アプリタスクは受信バッファには触れない)
・アプリタスク受信バッファ読取中(通信タスクは受信バッファには触れない)
上記2つの状態を解消する何らかの仕組みは必要
通信タスクが通信し受信バッファに溜め込んで
アプリタスクが受信バッファを定期で見に行く造りにした場合
・通信タスク受信バッファ書込中(アプリタスクは受信バッファには触れない)
・アプリタスク受信バッファ読取中(通信タスクは受信バッファには触れない)
上記2つの状態を解消する何らかの仕組みは必要
373デフォルトの名無しさん
2020/03/04(水) 21:03:04.11ID:FUOXjc3Y >>372
そうですね
なんらかの形で排他を行い、リングバッファのような仕組みでデータの受け渡しを行なって、プロセス相互にメッセージを送受信してイベントの発生を通知できたらいいですね。
ありがとうございます
そうですね
なんらかの形で排他を行い、リングバッファのような仕組みでデータの受け渡しを行なって、プロセス相互にメッセージを送受信してイベントの発生を通知できたらいいですね。
ありがとうございます
374デフォルトの名無しさん
2020/03/04(水) 22:20:56.21ID:yiNVycVp >>350
機能が違うからプロセス分けるってのはC#では一般的ではないね
ネットワークI/Oを担当する部分と、業務ロジック/UIを担当する部分で機能は違っても
両方存在しないとユースケースが完結できないのであれば一般的には一つのプログラムにする
通信機能を複数のプログラムで共有したい場合だったり
それぞれのプログラムの起動/停止タイミングの違ったり
耐障害性を考慮したプロセス監視要件が違うケースみたいに
プログラムを分ける必要のある要件があれば別
プロセス分ける必要がなければC#の場合はマルチプロセスに比べて
マルチスレッドのほうが道具も揃ってるしシンプルに作れる
機能が違うからプロセス分けるってのはC#では一般的ではないね
ネットワークI/Oを担当する部分と、業務ロジック/UIを担当する部分で機能は違っても
両方存在しないとユースケースが完結できないのであれば一般的には一つのプログラムにする
通信機能を複数のプログラムで共有したい場合だったり
それぞれのプログラムの起動/停止タイミングの違ったり
耐障害性を考慮したプロセス監視要件が違うケースみたいに
プログラムを分ける必要のある要件があれば別
プロセス分ける必要がなければC#の場合はマルチプロセスに比べて
マルチスレッドのほうが道具も揃ってるしシンプルに作れる
375デフォルトの名無しさん
2020/03/04(水) 22:27:53.31ID:5mLImXyq376デフォルトの名無しさん
2020/03/04(水) 22:30:17.84ID:GUfzIi7v UI使わない時(ログオフ時)でも常に通信してる必要があるなら
通信部だけ独立させてサービス化することはあるな
通信部だけ独立させてサービス化することはあるな
377デフォルトの名無しさん
2020/03/04(水) 22:39:38.18ID:yiNVycVp プロセス間通信は.NET FrameworkならWCFを使うのが一般的だった
(他は.NET RemotingやIpcChannelとか)
ただ.NET Coreだと上の3つはサポートされてないから
標準でとなるとNamed PipeかSocket、あとはHTTPサーバーを立てるくらい
どれ使ってもWCFと違って型付きでデータをやり取りできないので
マーシャル/アンマーシャルは外部ライブラリ使ったりして追加実装する必要がある
ローカル限定ならまずはNamed Pipeから考える
通信用プロセスと業務用プロセスが別のマシンで稼働する可能性があったり
それぞれ別の理由でスケールしていく可能性があるなら
少し大げさだけどRabbitMQみたいなメッセージングも選択肢として検討するかな
(他は.NET RemotingやIpcChannelとか)
ただ.NET Coreだと上の3つはサポートされてないから
標準でとなるとNamed PipeかSocket、あとはHTTPサーバーを立てるくらい
どれ使ってもWCFと違って型付きでデータをやり取りできないので
マーシャル/アンマーシャルは外部ライブラリ使ったりして追加実装する必要がある
ローカル限定ならまずはNamed Pipeから考える
通信用プロセスと業務用プロセスが別のマシンで稼働する可能性があったり
それぞれ別の理由でスケールしていく可能性があるなら
少し大げさだけどRabbitMQみたいなメッセージングも選択肢として検討するかな
378デフォルトの名無しさん
2020/03/04(水) 22:40:48.64ID:5mLImXyq >>374
スレッドセーフのサンプル探すのが楽だよね
プロセス間通信のサンプル探すよりはいいと思う
書込中と読取中の2つのガードが必要なのに片方しかやってないのが多い
それも仕方ない話でこれ以上は詳細な仕様決めが必要になる
スレッドセーフのサンプル探すのが楽だよね
プロセス間通信のサンプル探すよりはいいと思う
書込中と読取中の2つのガードが必要なのに片方しかやってないのが多い
それも仕方ない話でこれ以上は詳細な仕様決めが必要になる
379デフォルトの名無しさん
2020/03/04(水) 22:45:34.67ID:Tg1eDdkO >>377
gRPCじゃね?
gRPCじゃね?
380デフォルトの名無しさん
2020/03/04(水) 23:06:44.84ID:yiNVycVp >>379
gRPCも選択肢としては考えるけど
ローカル限定のプロセス間通信なら大げさすぎる気がするし
リモートも考慮するなら業務プロセスが死んだ時の対応とかで
メッセージングにしといたほうが信頼性が高い
gRPCも選択肢としては考えるけど
ローカル限定のプロセス間通信なら大げさすぎる気がするし
リモートも考慮するなら業務プロセスが死んだ時の対応とかで
メッセージングにしといたほうが信頼性が高い
381デフォルトの名無しさん
2020/03/04(水) 23:36:06.22ID:ITD9wOqz ローカル限定ならMSMQが楽だけどね
パフォーマンス的にOKかどうかは要件次第。
DCEは悪用されまくってセキュリティー強化
で既存ソースが動かないってのはあるが、
スレッド生成から含めてランタイムが面倒見てくれるので便利。
パフォーマンス的にOKかどうかは要件次第。
DCEは悪用されまくってセキュリティー強化
で既存ソースが動かないってのはあるが、
スレッド生成から含めてランタイムが面倒見てくれるので便利。
382デフォルトの名無しさん
2020/03/04(水) 23:37:26.09ID:FUOXjc3Y 皆さま
追加でご教示ありがとうございます
追加でご教示ありがとうございます
383デフォルトの名無しさん
2020/03/04(水) 23:54:13.27ID:nNNW6i++ Ruby では、
IO の派生クラスが、抽象クラスのBasicSocket で、
その具象派生クラスに、TCPSocket/TCPSserver, UDPSocket, UNIXSocket/UNIXServer がある。
TCP/UDP, UNIX ドメインのストリーム型ソケット
socket は、プロセス外部との通信 (プロセス間通信、インターネット) を実現します
直接HTTP を扱わず、TCP で書くことも出来るが、
HTTP 以外でも、TCP を使うプロトコルは、TCP で書くことも出来るが、
普通は、ほとんどのプロトコルで、既に公開されたライブラリを使う、と書いてある。
つまり、これらを使って自分で書くことはない
HTTP などの既に公開されたライブラリを使う!
IO の派生クラスが、抽象クラスのBasicSocket で、
その具象派生クラスに、TCPSocket/TCPSserver, UDPSocket, UNIXSocket/UNIXServer がある。
TCP/UDP, UNIX ドメインのストリーム型ソケット
socket は、プロセス外部との通信 (プロセス間通信、インターネット) を実現します
直接HTTP を扱わず、TCP で書くことも出来るが、
HTTP 以外でも、TCP を使うプロトコルは、TCP で書くことも出来るが、
普通は、ほとんどのプロトコルで、既に公開されたライブラリを使う、と書いてある。
つまり、これらを使って自分で書くことはない
HTTP などの既に公開されたライブラリを使う!
384デフォルトの名無しさん
2020/03/04(水) 23:58:55.88ID:ITD9wOqz ちくわ大明神
385デフォルトの名無しさん
2020/03/05(木) 00:13:16.01ID:eAZwhj1s 現れたなRuby妖怪…
386デフォルトの名無しさん
2020/03/05(木) 10:52:16.03ID:BSkbts2i >>374
>両方存在しないとユースケースが完結できないのであれば一般的には一つのプログラムにする
それは機能分割できてないだけでは?
別レイヤとして処理を依頼する、その結果を受け取るで済む話のような?
>両方存在しないとユースケースが完結できないのであれば一般的には一つのプログラムにする
それは機能分割できてないだけでは?
別レイヤとして処理を依頼する、その結果を受け取るで済む話のような?
387デフォルトの名無しさん
2020/03/05(木) 12:40:03.16ID:TOZ2Advl mqttとか
388デフォルトの名無しさん
2020/03/06(金) 04:08:23.78ID:4zsVrvlG C#でpandasに相当するのてDataTableですか?
389デフォルトの名無しさん
2020/03/06(金) 10:32:43.31ID:3H/1PUe0 DataGridView の DataSource として List をバインドすると完了までに時間がかかる(List の Item 数が約816万件ある)ので、
徐々に追加・表示されるようにしたいのですが、どうすればよいでしょうか。
徐々に追加・表示されるようにしたいのですが、どうすればよいでしょうか。
390デフォルトの名無しさん
2020/03/06(金) 10:53:44.65ID:+Or8jz1j バインディングはあきらめて仮想モード
http://home.a00.itscom.net/hatada/csharp/datagridview02.html
まあ816万件のほうをなんとかすべきだけどね
http://home.a00.itscom.net/hatada/csharp/datagridview02.html
まあ816万件のほうをなんとかすべきだけどね
391デフォルトの名無しさん
2020/03/06(金) 12:12:19.81ID:zx4TP0wl 816万件表示して全部目で見るのかって話だな
392デフォルトの名無しさん
2020/03/06(金) 14:50:23.81ID:FB3Rm5f4 たしかに800万件を全てバインドしてしまうという考え方が乱暴かもね。
そうすれば楽だとは思うけど、別の方法を考えた方が良いと誰に聞いても言うんじゃないかな
そうすれば楽だとは思うけど、別の方法を考えた方が良いと誰に聞いても言うんじゃないかな
393デフォルトの名無しさん
2020/03/08(日) 17:03:53.86ID:NoMbfY/N 質問です。
Adaptive Code 第2版を読んでいるのですが、
SQLを用いたサンプルプログラムの実行がうまくいかず、困っています。
サンプルは以下のものを使用しています。
https://github.com/AdaptiveCode/AdaptiveCode/tree/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf
SQL Serverとの接続をする部分で例外を出します。
具体的には、以下のソースファイルの26行目です。
https://github.com/AdaptiveCode/AdaptiveCode/blob/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf/ServiceImplementations/TaskServiceAdo.cs
エラーメッセージは、以下のとおりです。
System.Data.SqlClient.SqlException: 'SQL Server への接続を確立しているときに
ネットワーク関連またはインスタンス固有のエラーが発生しました。
サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、
および SQL Server がリモート接続を許可するように構成されていることを確認してください。
(provider: Named Pipes Provider, error: 40 - SQL Server への接続を開けませんでした)'
動作環境はWindows 10、Visual Studio Community 2019です。
SQL Server Express 2016 LocalDB はVSと同時にインストールしてあります。
解決策をご教示いただきたく、よろしくお願いします。
Adaptive Code 第2版を読んでいるのですが、
SQLを用いたサンプルプログラムの実行がうまくいかず、困っています。
サンプルは以下のものを使用しています。
https://github.com/AdaptiveCode/AdaptiveCode/tree/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf
SQL Serverとの接続をする部分で例外を出します。
具体的には、以下のソースファイルの26行目です。
https://github.com/AdaptiveCode/AdaptiveCode/blob/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf/ServiceImplementations/TaskServiceAdo.cs
エラーメッセージは、以下のとおりです。
System.Data.SqlClient.SqlException: 'SQL Server への接続を確立しているときに
ネットワーク関連またはインスタンス固有のエラーが発生しました。
サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、
および SQL Server がリモート接続を許可するように構成されていることを確認してください。
(provider: Named Pipes Provider, error: 40 - SQL Server への接続を開けませんでした)'
動作環境はWindows 10、Visual Studio Community 2019です。
SQL Server Express 2016 LocalDB はVSと同時にインストールしてあります。
解決策をご教示いただきたく、よろしくお願いします。
394デフォルトの名無しさん
2020/03/08(日) 17:44:31.79ID:K4cIg85y >>393
using(var connection = new SqlConnection(settings.GetSetting("TaskDatabaseConnectionString"))){
この次の行で止めてconnection.ConnectionStringの値を確認してみ
LocalDBしかインストールしてないなら接続文字列は "(LocalDB)\{LocalDBインスタンス名}" みたいな形式でないと接続できないよ
このあたりを参考にしてね
https://blog.clock-up.jp/entry/2016/07/27/vs-sqlserver-localdb
using(var connection = new SqlConnection(settings.GetSetting("TaskDatabaseConnectionString"))){
この次の行で止めてconnection.ConnectionStringの値を確認してみ
LocalDBしかインストールしてないなら接続文字列は "(LocalDB)\{LocalDBインスタンス名}" みたいな形式でないと接続できないよ
このあたりを参考にしてね
https://blog.clock-up.jp/entry/2016/07/27/vs-sqlserver-localdb
395393
2020/03/08(日) 18:15:24.24ID:vsuFdxy2 >>394
早速ありがとうございます。
connection.ConnectionStringの値は、以下のようになっていました。
ConnectionString = "Data Source=(local);Initial Catalog=TaskDatabase;Integrated Security=True;Application Name=Task List Editor"
ソースコードを読み解いてみると、接続文字列は以下のApp.configから読み取るようになっていました。
https://github.com/AdaptiveCode/AdaptiveCode/blob/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf/UI/App.config
そこでApp.config内の接続文字列を"Data Source=(LocalDB)\MSSQLLocalDB;.....(以下省略)"と変更したところ、
エラーメッセージが変化しました。以下のとおりです。
System.Data.SqlClient.SqlException: 'Cannot open database "TaskDatabase" requested by the login. The login failed.
Login failed for user '{自分のPCのホスト名}\{ユーザー名}'.'
どうやらこれだけでは解決しないようなので、
教えていただいたブログの情報を参考に設定を変更してみます。
それでもうまく行かなければまたご質問いたします。
早速ありがとうございます。
connection.ConnectionStringの値は、以下のようになっていました。
ConnectionString = "Data Source=(local);Initial Catalog=TaskDatabase;Integrated Security=True;Application Name=Task List Editor"
ソースコードを読み解いてみると、接続文字列は以下のApp.configから読み取るようになっていました。
https://github.com/AdaptiveCode/AdaptiveCode/blob/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf/UI/App.config
そこでApp.config内の接続文字列を"Data Source=(LocalDB)\MSSQLLocalDB;.....(以下省略)"と変更したところ、
エラーメッセージが変化しました。以下のとおりです。
System.Data.SqlClient.SqlException: 'Cannot open database "TaskDatabase" requested by the login. The login failed.
Login failed for user '{自分のPCのホスト名}\{ユーザー名}'.'
どうやらこれだけでは解決しないようなので、
教えていただいたブログの情報を参考に設定を変更してみます。
それでもうまく行かなければまたご質問いたします。
396デフォルトの名無しさん
2020/03/08(日) 18:28:28.32ID:K4cIg85y >>395
> System.Data.SqlClient.SqlException: 'Cannot open database "TaskDatabase" requested by the login. The login failed.
Visual Studio入れてるなら 表示 - SQL Server オブジェクト エクスプローラー をクリックして
SQL Server の下の データベース を展開して接続したいデータベースがあるかを確認して
(そもそもデータベース作ってあるの?)
> System.Data.SqlClient.SqlException: 'Cannot open database "TaskDatabase" requested by the login. The login failed.
Visual Studio入れてるなら 表示 - SQL Server オブジェクト エクスプローラー をクリックして
SQL Server の下の データベース を展開して接続したいデータベースがあるかを確認して
(そもそもデータベース作ってあるの?)
397デフォルトの名無しさん
2020/03/08(日) 18:32:39.19ID:AVAsnwFk398393
2020/03/08(日) 19:12:05.97ID:vsuFdxy2 >>394
教えていただいた解説ブログを参考に設定を確認しました。
・LocalDB の存在確認
コントロールパネルの「プログラムと機能」にMicrosoft SQL Server Express 2016 LocalDB が存在しており、インストールはできているようです。
・有効な LocalDB のインスタンス名を確認
解説と同様に、sqllocaldb infoをコマンドプロンプトで実行すると、以下が表示されました。
MSSQLLocalDB
ProjectsV13
・SQL Server Data Tools for Visual Studio の存在確認
コントロールパネルの「プログラムと機能」には存在しませんでした。しかしVisual Studioの「ツール」→「ツールと機能を取得」を
確認すると「SQL Server Data Tools」にはチェックマークが入っており、インストールはできているように見えます。
・Visual Studio に LocalDB インスタンス名を設定しておく
"(LocalDB)\MSSQLLocalDB" が既に設定されていました。
・Visual Studio 内 Server Explorer から LocalDB 接続を行う
解説の通りmdfファイルを作成しました。接続文字列を確認し、サンプルプログラムのApp.config内の接続文字列を、以下の通り変更してみました。
"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename={先ほど作成したmdfファイルのパス};
Initial Catalog=TaskDatabase;Integrated Security=True;Application Name=Task List Editor"
すると、発生する例外が変わり、以下の通りになりました。
System.Data.SqlClient.SqlException: 'Cannot attach file '{先ほど作成したmdfファイルのパス}'
as database 'TaskDatabase' because this file is already in use for database '{先ほど作成したmdfファイルのパス}''
>>396
「SQL Server オブジェクト エクスプローラー」
を開いたところ、「SQL Server」→「(localdb)\MSSQLLocalDB」→「データベース」
のところに解説ブログに従って作成したmdfファイルのパスが表示されています。(これで「作ってある」と言えるのかがよく分かりませんが…)
教えていただいた解説ブログを参考に設定を確認しました。
・LocalDB の存在確認
コントロールパネルの「プログラムと機能」にMicrosoft SQL Server Express 2016 LocalDB が存在しており、インストールはできているようです。
・有効な LocalDB のインスタンス名を確認
解説と同様に、sqllocaldb infoをコマンドプロンプトで実行すると、以下が表示されました。
MSSQLLocalDB
ProjectsV13
・SQL Server Data Tools for Visual Studio の存在確認
コントロールパネルの「プログラムと機能」には存在しませんでした。しかしVisual Studioの「ツール」→「ツールと機能を取得」を
確認すると「SQL Server Data Tools」にはチェックマークが入っており、インストールはできているように見えます。
・Visual Studio に LocalDB インスタンス名を設定しておく
"(LocalDB)\MSSQLLocalDB" が既に設定されていました。
・Visual Studio 内 Server Explorer から LocalDB 接続を行う
解説の通りmdfファイルを作成しました。接続文字列を確認し、サンプルプログラムのApp.config内の接続文字列を、以下の通り変更してみました。
"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename={先ほど作成したmdfファイルのパス};
Initial Catalog=TaskDatabase;Integrated Security=True;Application Name=Task List Editor"
すると、発生する例外が変わり、以下の通りになりました。
System.Data.SqlClient.SqlException: 'Cannot attach file '{先ほど作成したmdfファイルのパス}'
as database 'TaskDatabase' because this file is already in use for database '{先ほど作成したmdfファイルのパス}''
>>396
「SQL Server オブジェクト エクスプローラー」
を開いたところ、「SQL Server」→「(localdb)\MSSQLLocalDB」→「データベース」
のところに解説ブログに従って作成したmdfファイルのパスが表示されています。(これで「作ってある」と言えるのかがよく分かりませんが…)
399393
2020/03/08(日) 19:36:27.17ID:vsuFdxy2 すみません、どうやら解決しました。
サンプルプログラムのTaskDatabaseプロジェクトの「プロパティ」→「デバッグ」を見たところ、
「ターゲット接続文字列」が以下のように記載されていました。
Data Source=(localdb)\ProjectsV13;Initial Catalog=TaskDatabase;Integrated Security=True;Pooling=False;Connect Timeout=30
また、「SQL Server オブジェクト エクスプローラー」をよくよく見てみると、
「SQL Server」の下には「(localdb)\MSSQLLocalDB」のほかに「(localdb)\ProjectsV13」があり、
その下に今回のサンプルプログラムで使用する「TaskDatabase」が作成されていました(いつの間にできた??)。
そこで接続文字列のデータソースを「(localdb)\ProjectsV13」に変更したところ、サンプルプログラムがうまく動作しました。
SQL周りの知識が全く無いので、MDFファイルがなぜ、いつの間に作成されていたのか、、、
まだ理解できていないところはありますが、とりあえず先には進めそうです。
教えていただいた皆様、ありがとうございました。
サンプルプログラムのTaskDatabaseプロジェクトの「プロパティ」→「デバッグ」を見たところ、
「ターゲット接続文字列」が以下のように記載されていました。
Data Source=(localdb)\ProjectsV13;Initial Catalog=TaskDatabase;Integrated Security=True;Pooling=False;Connect Timeout=30
また、「SQL Server オブジェクト エクスプローラー」をよくよく見てみると、
「SQL Server」の下には「(localdb)\MSSQLLocalDB」のほかに「(localdb)\ProjectsV13」があり、
その下に今回のサンプルプログラムで使用する「TaskDatabase」が作成されていました(いつの間にできた??)。
そこで接続文字列のデータソースを「(localdb)\ProjectsV13」に変更したところ、サンプルプログラムがうまく動作しました。
SQL周りの知識が全く無いので、MDFファイルがなぜ、いつの間に作成されていたのか、、、
まだ理解できていないところはありますが、とりあえず先には進めそうです。
教えていただいた皆様、ありがとうございました。
400デフォルトの名無しさん
2020/03/08(日) 19:55:20.25ID:qHSkoWsm 実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
401デフォルトの名無しさん
2020/03/08(日) 22:53:36.55ID:A6vL8TvC >>400
そんなに稼いでるのにYouTubeで小金稼ぎ必死だな
そんなに稼いでるのにYouTubeで小金稼ぎ必死だな
402デフォルトの名無しさん
2020/03/09(月) 18:01:09.63ID:T4gz2l9R >>399
君はそのうち本名とかアカウントとかパスワードとか晒すことになりそうだ
君はそのうち本名とかアカウントとかパスワードとか晒すことになりそうだ
403デフォルトの名無しさん
2020/03/10(火) 06:30:05.96ID:iYHWDDjZ JSON-RPC(http)のクライアントを作っていて、自前のコードで一通りできてますが、コード量が非常に多いです。
NuGetで探すと.NET Core用のものが多いのですが、今回は.NET framework 4.6.1です。
JSON-RPCクライアントに向く軽量ライブラリってないでしょうか?
System.Text.JsonなどでJSONパースだけをさせるとかが定番なのでしょうか?
NuGetで探すと.NET Core用のものが多いのですが、今回は.NET framework 4.6.1です。
JSON-RPCクライアントに向く軽量ライブラリってないでしょうか?
System.Text.JsonなどでJSONパースだけをさせるとかが定番なのでしょうか?
404デフォルトの名無しさん
2020/03/10(火) 13:21:19.39ID:X+eVfRrs 同じですか?
改変前
Image img = this.picbox.Image as Bitmap;
if(img == null){
img = new Bitmap(this.picbox.Width, this.picbox.Height, PixelFormat.Format32bppRgb);
this.picbox.Image = img;
}
改変後
Image img = this.picbox.Image as Bitmap ??= this.picbox.Image = new Bitmap(this.picbox.Width, this.picbox.Height, PixelFormat.Format32bppRgb);
改変前
Image img = this.picbox.Image as Bitmap;
if(img == null){
img = new Bitmap(this.picbox.Width, this.picbox.Height, PixelFormat.Format32bppRgb);
this.picbox.Image = img;
}
改変後
Image img = this.picbox.Image as Bitmap ??= this.picbox.Image = new Bitmap(this.picbox.Width, this.picbox.Height, PixelFormat.Format32bppRgb);
405デフォルトの名無しさん
2020/03/10(火) 13:38:27.04ID:upXRqZ12 自分で判断できないようなコードを書くんじゃない
> this.picbox.Image as Bitmap ??=
この部分でコンパイルエラーになるはずだが
> this.picbox.Image as Bitmap ??=
この部分でコンパイルエラーになるはずだが
406デフォルトの名無しさん
2020/03/16(月) 18:59:53.15ID:H8bmY3hF 新型コロナウィルス対策
一般人「手洗い、うがい、マスク」
c# プログラマ「ウィルス対策はマイクロソフトazule にまかせるよ。あとWindows ディフェンダー!」
一般人「手洗い、うがい、マスク」
c# プログラマ「ウィルス対策はマイクロソフトazule にまかせるよ。あとWindows ディフェンダー!」
407デフォルトの名無しさん
2020/05/02(土) 08:52:50.92ID:0mmjTk37 Console.Read() とか Console.In.ReadLine() とかじゃなくて
FileStream に stdio を指定して読み込む方法を教えて下さい
FileStream に stdio を指定して読み込む方法を教えて下さい
408デフォルトの名無しさん
2020/05/02(土) 09:53:52.07ID:z8QGl02A FileStreamは文字通りFileStreamであってFILE*に対応するのはSreamだよ
標準入力を指すStreamならConsole.OpenStandardInputで取得できる
標準入力を指すStreamならConsole.OpenStandardInputで取得できる
409デフォルトの名無しさん
2020/05/03(日) 09:16:50.07ID:THymLCbI スタックに積んでから取り出すと何故か値が変化しているという謎の現象に3日間ぐらい悩んだが
ついさっきプロパティは参照型だという事実に気付いた
ついさっきプロパティは参照型だという事実に気付いた
410デフォルトの名無しさん
2020/05/03(日) 14:44:07.05ID:H3ipvGy5411デフォルトの名無しさん
2020/05/03(日) 15:08:51.56ID:SHPPims3 そのプロパティが参照型 と言いたかったんだろう多分
412デフォルトの名無しさん
2020/05/05(火) 22:26:08.07ID:nSEWNo5U すみません。今、mciというのを使って、音楽再生アプリを作っているのですが、
Windowsメディアプレイヤーみたいに、曲の進捗状況を示すバーみたいのって、
コンポーネントにないでしょうか?
Windowsメディアプレイヤーみたいに、曲の進捗状況を示すバーみたいのって、
コンポーネントにないでしょうか?
413デフォルトの名無しさん
2020/05/05(火) 22:30:28.96ID:nSEWNo5U プログレスバーはダサいから、いやです。
理想を言うとDMMプレーヤーみたいに進捗状況を青いのがニョキニョキ伸びるのが
カッコ良くていいです。
自作するとしたらフォームに青いニョキニョキをグラフィッククラスで描画するんでしょうか?
理想を言うとDMMプレーヤーみたいに進捗状況を青いのがニョキニョキ伸びるのが
カッコ良くていいです。
自作するとしたらフォームに青いニョキニョキをグラフィッククラスで描画するんでしょうか?
414デフォルトの名無しさん
2020/05/05(火) 22:46:23.76ID:3RO6WiLW mci では無理やろ
415デフォルトの名無しさん
2020/05/05(火) 23:01:45.91ID:ZjI6EVx3 >>413
エロ動画とか見ないからDMM Player知らんのだけど、要するに、
(1) ダウンロード済みのパーセンテージを帯の長さで
(2) 再生位置をスライダーの位置で
表示するありがちな奴?
Windows Formsにそんなのないので自作するしかないね
エロ動画とか見ないからDMM Player知らんのだけど、要するに、
(1) ダウンロード済みのパーセンテージを帯の長さで
(2) 再生位置をスライダーの位置で
表示するありがちな奴?
Windows Formsにそんなのないので自作するしかないね
416デフォルトの名無しさん
2020/05/06(水) 00:49:20.54ID:5PXshCOx >>413
細かいツッコミするとコントロールを描画することになる
フォームに直接描画してもいいけど扱いが面倒になる
https://dobon.net/vb/dotnet/graphics/drawcontrols.html
https://dobon.net/vb/dotnet/graphics/drawvisualcontrol.html
進捗状況は>>415の通り自分で取ってこなきゃならないけどmciがどうなっているのかは知らない
細かいツッコミするとコントロールを描画することになる
フォームに直接描画してもいいけど扱いが面倒になる
https://dobon.net/vb/dotnet/graphics/drawcontrols.html
https://dobon.net/vb/dotnet/graphics/drawvisualcontrol.html
進捗状況は>>415の通り自分で取ってこなきゃならないけどmciがどうなっているのかは知らない
417デフォルトの名無しさん
2020/05/06(水) 10:14:22.23ID:YZbQDwIi WPFで適当に作ったら?
418デフォルトの名無しさん
2020/05/07(木) 08:09:53.53ID:uSRgeDXp なぜ@は正常にダウンロードできないのか教えて下さい
よろしくお願いします
@aaa.csvが作成されるのですが0 byteの空のcsvです
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var wc1 = new WebClient();
wc1.DownloadFileAsync(url1, csv1);
Aこれは正常にダウンロードできます
var url2 = "http://tekitou/xxx.csv";
var csv2 = "bbb.csv";
var wc2 = new WebClient();
wc2.DownloadFile(url2, csv2);
B上の2つを1つのメソッドの中に並べてから実行するとなぜかaaa.csv、bbb.csvともに正常にダウンロードできます
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var wc1 = new WebClient();
wc1.DownloadFileAsync(url1, csv1);
var url2 = "http://tekitou/xxx.csv";
var csv2 = "bbb.csv";
var wc2 = new WebClient();
wc2.DownloadFile(url2, csv2);
よろしくお願いします
@aaa.csvが作成されるのですが0 byteの空のcsvです
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var wc1 = new WebClient();
wc1.DownloadFileAsync(url1, csv1);
Aこれは正常にダウンロードできます
var url2 = "http://tekitou/xxx.csv";
var csv2 = "bbb.csv";
var wc2 = new WebClient();
wc2.DownloadFile(url2, csv2);
B上の2つを1つのメソッドの中に並べてから実行するとなぜかaaa.csv、bbb.csvともに正常にダウンロードできます
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var wc1 = new WebClient();
wc1.DownloadFileAsync(url1, csv1);
var url2 = "http://tekitou/xxx.csv";
var csv2 = "bbb.csv";
var wc2 = new WebClient();
wc2.DownloadFile(url2, csv2);
419デフォルトの名無しさん
2020/05/07(木) 08:23:39.67ID:454F8U2c >>418
asyncって何か知ってる?
asyncって何か知ってる?
420デフォルトの名無しさん
2020/05/07(木) 08:32:15.14ID:uSRgeDXp >>419
はい!非同期にファイルをダウンロードするメソッドです!
はい!非同期にファイルをダウンロードするメソッドです!
421デフォルトの名無しさん
2020/05/07(木) 08:52:34.58ID:3Zb9YKCz 同期・非同期の両方を使うのは、おかしい。
JavaScript ならクライアント側だから非同期で、Ruby ならサーバー側だから同期
非同期は、同期のような書き方はできない。
コンテキスト・文脈が異なるから、
異次元との通信で、タイムライン・時間の進み方も異なる
だから異次元通信のような、独特なタイミングの調整が必要!
JavaScript ならクライアント側だから非同期で、Ruby ならサーバー側だから同期
非同期は、同期のような書き方はできない。
コンテキスト・文脈が異なるから、
異次元との通信で、タイムライン・時間の進み方も異なる
だから異次元通信のような、独特なタイミングの調整が必要!
422デフォルトの名無しさん
2020/05/07(木) 09:03:48.11ID:z0QaEyrp423デフォルトの名無しさん
2020/05/07(木) 09:05:22.09ID:PKEvLkh9 質問の趣旨からは外れるけど、System.Net.WebClientは古いから、新規開発ではSystem.Net.Http.HttpClientが推奨だったかと
424デフォルトの名無しさん
2020/05/07(木) 09:05:44.40ID:K/pi2iFO425デフォルトの名無しさん
2020/05/07(木) 09:12:23.14ID:uSRgeDXp >>421
正直に言うとよく分かりません!
目的はwindowsフォームで作ったアプリで使う事です。
具体的には、DownloadFileCompletedイベントを使い、
ダウンロード完了を待ってCSVファイルにアクセスしたいと思いました
実はこれは成功しています。
コンソールアプリでも同様のことができないかとチャレンジしてみたのですがこの通りダメでした。
「非同期」について根本的なことが理解できていないと指摘されているのだと思ってます。
もう少し調べてみます!
正直に言うとよく分かりません!
目的はwindowsフォームで作ったアプリで使う事です。
具体的には、DownloadFileCompletedイベントを使い、
ダウンロード完了を待ってCSVファイルにアクセスしたいと思いました
実はこれは成功しています。
コンソールアプリでも同様のことができないかとチャレンジしてみたのですがこの通りダメでした。
「非同期」について根本的なことが理解できていないと指摘されているのだと思ってます。
もう少し調べてみます!
426デフォルトの名無しさん
2020/05/07(木) 09:13:22.78ID:uSRgeDXp >>422
windowsフォームアプリで使っているので、それを参考に同じように書いてみましたがやはり空のファイルしかダウンロードできません!
static void Main(string[] args)
{
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
WebClient wc1 = new WebClient();
wc1.DownloadFileCompleted += Wc1_DownloadFileCompleted;
wc1.DownloadFileAsync(url1, csv1);
}
private static void Wc1_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Console.WriteLine("完了");
}
windowsフォームアプリで使っているので、それを参考に同じように書いてみましたがやはり空のファイルしかダウンロードできません!
static void Main(string[] args)
{
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
WebClient wc1 = new WebClient();
wc1.DownloadFileCompleted += Wc1_DownloadFileCompleted;
wc1.DownloadFileAsync(url1, csv1);
}
private static void Wc1_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Console.WriteLine("完了");
}
427デフォルトの名無しさん
2020/05/07(木) 09:17:37.03ID:uSRgeDXp428デフォルトの名無しさん
2020/05/07(木) 09:18:45.92ID:uSRgeDXp429デフォルトの名無しさん
2020/05/07(木) 09:40:06.42ID:qpGBsCgy430デフォルトの名無しさん
2020/05/07(木) 10:52:25.34ID:uSRgeDXp >>429
へとへとになりましたがいけました・・・・
一応報告です
async voidはダメだという記述をどこかでみました(ぐぐりまくった結果ソースがどこかわからない)
async Task MainでいけるということですがC#7.1を有効にするためごにょごにょしました
awaitをつけたところ戻り値voidのメソッドはだめだと怒られたのでDownloadFileTaskAsyncに変えてみました
static async Task Main(string[] args)
{
var url1 = "http://tekitou/xxx.csv";
var csv1 = "aaa.csv";
var client = new WebClient();
await client.DownloadFileTaskAsync(url1, csv1);
}
なんだか胃が痛くなってきました
ありがとうございました・・・
へとへとになりましたがいけました・・・・
一応報告です
async voidはダメだという記述をどこかでみました(ぐぐりまくった結果ソースがどこかわからない)
async Task MainでいけるということですがC#7.1を有効にするためごにょごにょしました
awaitをつけたところ戻り値voidのメソッドはだめだと怒られたのでDownloadFileTaskAsyncに変えてみました
static async Task Main(string[] args)
{
var url1 = "http://tekitou/xxx.csv";
var csv1 = "aaa.csv";
var client = new WebClient();
await client.DownloadFileTaskAsync(url1, csv1);
}
なんだか胃が痛くなってきました
ありがとうございました・・・
431デフォルトの名無しさん
2020/05/07(木) 10:59:06.40ID:qpGBsCgy432デフォルトの名無しさん
2020/05/07(木) 11:08:02.76ID:uSRgeDXp >>431
ありがとうございました。
ダウンロード終了を待たないとそりゃ中身0バイトでしょの一言が貴重でした
ちなみにですが、
https://dobon.net/vb/dotnet/internet/downloadfile.html
「.NET Framework 2.0以降で、非同期的にファイルをダウンロードし保存する」
で紹介されているC#のコードですが、ここではawaitが出てこない
その理由は、
コンソールアプリと違ってフォームを表示しているメインのスレッドは勝手に終了しないから
という理解でよいでしょうか?
コンソールアプリだとメインで走っているスレッドはコードの最後まで行けば勝手に終わってしまう。そのため、ダウンロードに関わっているスレッドもそれに引きずられて終わってしまう
と考えたのですが・・・
ありがとうございました。
ダウンロード終了を待たないとそりゃ中身0バイトでしょの一言が貴重でした
ちなみにですが、
https://dobon.net/vb/dotnet/internet/downloadfile.html
「.NET Framework 2.0以降で、非同期的にファイルをダウンロードし保存する」
で紹介されているC#のコードですが、ここではawaitが出てこない
その理由は、
コンソールアプリと違ってフォームを表示しているメインのスレッドは勝手に終了しないから
という理解でよいでしょうか?
コンソールアプリだとメインで走っているスレッドはコードの最後まで行けば勝手に終わってしまう。そのため、ダウンロードに関わっているスレッドもそれに引きずられて終わってしまう
と考えたのですが・・・
433デフォルトの名無しさん
2020/05/07(木) 11:15:54.73ID:uSRgeDXp >>418のBでうまくいったのは、
たまたま非同期が前、同期が後の順番だったため、同期が終わるまでプログラム全体が終了せず
その間に非同期のほうも無事にダウンロードできたという事で・・・?
サーバー側の都合で同時に同じファイルのダウンロードは認められず、先に要求のあった非同期が終わるまで同期のほうが始まらなかったとか
たまたま非同期が前、同期が後の順番だったため、同期が終わるまでプログラム全体が終了せず
その間に非同期のほうも無事にダウンロードできたという事で・・・?
サーバー側の都合で同時に同じファイルのダウンロードは認められず、先に要求のあった非同期が終わるまで同期のほうが始まらなかったとか
434デフォルトの名無しさん
2020/05/07(木) 12:01:08.20ID:eRnHVkfo まずあしんく勉強しよや
435デフォルトの名無しさん
2020/05/07(木) 12:24:21.96ID:K/pi2iFO >>432
DownloadFileAsyncとDownloadFileTaskAsyncは別物よ
そもそも.NET Framework 2.0時代にはTaskは存在しないし当然awaitなんてのも存在しない
DownloadFileAsyncはイベントベースで完了を待つ(ことができる)もの
まあフォームアプリの場合通常はフォームが閉じない限りプロセスは終わらないんだから必ずしも明示的に待つ必要はないわけで
でもある程度大きいファイルをDLすることを考えると
DL中にフォームが閉じられた(プロセスが終了した)ときに打ち切られるのは変わらないから
必要に応じてDL中はFormClosingで閉じるのをキャンセルしたりする処理を書かないといけない
DownloadFileAsyncとDownloadFileTaskAsyncは別物よ
そもそも.NET Framework 2.0時代にはTaskは存在しないし当然awaitなんてのも存在しない
DownloadFileAsyncはイベントベースで完了を待つ(ことができる)もの
まあフォームアプリの場合通常はフォームが閉じない限りプロセスは終わらないんだから必ずしも明示的に待つ必要はないわけで
でもある程度大きいファイルをDLすることを考えると
DL中にフォームが閉じられた(プロセスが終了した)ときに打ち切られるのは変わらないから
必要に応じてDL中はFormClosingで閉じるのをキャンセルしたりする処理を書かないといけない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- 【悲報】おこめ券、9.5億円配布分のうち2.4億が経費、うちJAが1億円中抜き🤗高市ありがとう [359965264]
- AV女優さん「時間停止物」のAVを完全否定してネット騒然。お前らの夢が1つ潰える [152212454]
- 【悲報】高市有事で日本に同調する国、1つも現れないwwwwwwwwwwwwwww [603416639]
- 自閉症が「んなっしょい」と連呼するお🏡
- FGOで好きなサーヴァントがアビゲイル、北斎、楊貴妃なんだが
- (´・ω・`)おはよ
