「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
探検
ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/12/15(土) 10:46:07.45ID:Wu4Fx0bU361デフォルトの名無しさん
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で閉じるのをキャンセルしたりする処理を書かないといけない
436デフォルトの名無しさん
2020/05/07(木) 12:39:16.54ID:iKRewGMt タマタマ動いてるプログラムと
正しく動いてるプログラムは
月とすっぽんの差がある
正しく動いてるプログラムは
月とすっぽんの差がある
437デフォルトの名無しさん
2020/05/07(木) 13:46:41.90ID:uSRgeDXp >>435
一番知りたいのはフォームアプリとコンソールアプリでなぜこのような違いがでるのかっていう点ですね
それについては>>432の理解でよいのでしょうか
前半は肯定してもらったのですが、後半はどうでしょうか
>DownloadFileAsyncはイベントベースで完了を待つ(ことができる)もの
DownloadFileTaskAsyncでもcompletedイベントハンドラが動きました
とここまで書いて一発で疑問を解決してくれるコードを発見です
static void Main(string[] args)
{
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var client = new WebClient();
client.DownloadFileAsync(url1, csv1);
Console.ReadLine();
}
もちろんこれがアプリの中で使えるということではないんですが
基本の基本となる理屈がこれで分かりました
コンソールとフォームの違いに重点を置いた説明ってなかなか見当たらないんですよね
どちらかに特化したものはあちらこちらにあるんですけど。
そのせいで頭に生じた矛盾点が解決できず基本理解が大きくゆれていたんです
あと、>>418のBで順番を逆にしたら期待通りの結果が得られました
解決です
一番知りたいのはフォームアプリとコンソールアプリでなぜこのような違いがでるのかっていう点ですね
それについては>>432の理解でよいのでしょうか
前半は肯定してもらったのですが、後半はどうでしょうか
>DownloadFileAsyncはイベントベースで完了を待つ(ことができる)もの
DownloadFileTaskAsyncでもcompletedイベントハンドラが動きました
とここまで書いて一発で疑問を解決してくれるコードを発見です
static void Main(string[] args)
{
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var client = new WebClient();
client.DownloadFileAsync(url1, csv1);
Console.ReadLine();
}
もちろんこれがアプリの中で使えるということではないんですが
基本の基本となる理屈がこれで分かりました
コンソールとフォームの違いに重点を置いた説明ってなかなか見当たらないんですよね
どちらかに特化したものはあちらこちらにあるんですけど。
そのせいで頭に生じた矛盾点が解決できず基本理解が大きくゆれていたんです
あと、>>418のBで順番を逆にしたら期待通りの結果が得られました
解決です
438デフォルトの名無しさん
2020/05/07(木) 14:18:23.17ID:qpGBsCgy439デフォルトの名無しさん
2020/05/07(木) 14:25:50.34ID:qpGBsCgy >>437
ManualResetEventのWaitOneで待ち構えて、CompletedイベントでManualResetEventにSetしてあげるとかが王道なのかな。
そういう事しなくて済むようにしたのがAsyncだとは思うけど。
ManualResetEventのWaitOneは、Console.CancelKeyPressに紐付ける形でよく使うかもしれん。
フォームアプリでどうして大丈夫か、は、一回Program.csをよく読んでみたら良いんじゃないかな。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.application.run?view=netcore-3.1
ManualResetEventのWaitOneで待ち構えて、CompletedイベントでManualResetEventにSetしてあげるとかが王道なのかな。
そういう事しなくて済むようにしたのがAsyncだとは思うけど。
ManualResetEventのWaitOneは、Console.CancelKeyPressに紐付ける形でよく使うかもしれん。
フォームアプリでどうして大丈夫か、は、一回Program.csをよく読んでみたら良いんじゃないかな。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.application.run?view=netcore-3.1
440デフォルトの名無しさん
2020/05/07(木) 14:25:51.20ID:8jv+kISL441デフォルトの名無しさん
2020/05/07(木) 14:33:37.17ID:wSQDXo4u 学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
442デフォルトの名無しさん
2020/05/07(木) 15:03:36.84ID:uSRgeDXp443421
2020/05/07(木) 15:12:46.01ID:3Zb9YKCz 非同期は、異次元空間。
時間の進み方も違うから、相手を知ることができない。
過去・未来も、わからない
コンテキスト・文脈も異なる。
相手がエラー・例外でも、こちらでキャッチできない
そもそも相手が何も知らせてこない場合も多い。
エラーと知らせると、さらに攻撃されるから、何も送ってこない
非同期に対して、こちらが出来ることはタイムアウトして、あきらめることだけ
非同期は、独特な書き方が必要。
異次元と通信するのだから、独特なタイミングの調整が必要!
これを分かっていないと、アプリは何回かに1回、エラーを起こす。
常にエラーを起こさないだろ。
自分がテストした時は、正常に動く
こういうバグが、一番やっかい。
多くのアプリは、これで時々エラーを起こす
時間の進み方も違うから、相手を知ることができない。
過去・未来も、わからない
コンテキスト・文脈も異なる。
相手がエラー・例外でも、こちらでキャッチできない
そもそも相手が何も知らせてこない場合も多い。
エラーと知らせると、さらに攻撃されるから、何も送ってこない
非同期に対して、こちらが出来ることはタイムアウトして、あきらめることだけ
非同期は、独特な書き方が必要。
異次元と通信するのだから、独特なタイミングの調整が必要!
これを分かっていないと、アプリは何回かに1回、エラーを起こす。
常にエラーを起こさないだろ。
自分がテストした時は、正常に動く
こういうバグが、一番やっかい。
多くのアプリは、これで時々エラーを起こす
444デフォルトの名無しさん
2020/05/07(木) 15:19:22.24ID:cpirF9cI Rubyならそうかもなw
445421
2020/05/07(木) 15:31:27.24ID:3Zb9YKCz GUI アプリはイベントベースだから、
アプリの終了ボタンを押すなど、プロセス終了イベントを送らない限り、
CPU 使用率0 のまま、プロセスは存在し、イベントを待ち続ける
そこが、CUI アプリと異なる点
アプリの終了ボタンを押すなど、プロセス終了イベントを送らない限り、
CPU 使用率0 のまま、プロセスは存在し、イベントを待ち続ける
そこが、CUI アプリと異なる点
446デフォルトの名無しさん
2020/05/07(木) 15:41:04.30ID:cpirF9cI 何も知らないルビクソは黙ってろ
GUIアプリといえども実行中の非バックグラウンドスレッドが全て終了すればプロセスは終わる
にもかかわらずプロセスが勝手に終了してしまわないのは、フレームワークが内部的に無限ループでイベントをポーリングし続けているから
GUIアプリといえども実行中の非バックグラウンドスレッドが全て終了すればプロセスは終わる
にもかかわらずプロセスが勝手に終了してしまわないのは、フレームワークが内部的に無限ループでイベントをポーリングし続けているから
447デフォルトの名無しさん
2020/05/07(木) 15:42:15.08ID:qpGBsCgy GUIアプリがイベントベースってのは誤解を生みそうで好かんな。
結局アプリケーションメッセージループを理解しないと、真っ白になるGUIアプリ作ることになる。
CUIアプリでもちゃんとしたアプリ作るとなると普通はイベントループ的な部分を作るんだし、あんまり誤解を生みそうな発言は良くないんじゃないの?
結局アプリケーションメッセージループを理解しないと、真っ白になるGUIアプリ作ることになる。
CUIアプリでもちゃんとしたアプリ作るとなると普通はイベントループ的な部分を作るんだし、あんまり誤解を生みそうな発言は良くないんじゃないの?
448421
2020/05/07(木) 16:17:22.08ID:3Zb9YKCz ウィンドウプロシージャ
http://kaitei.net/winapi/window-procedures/#mssage-loop
GUI は、イベントドリブン。
Win32API: GetMessage とかだろ
http://kaitei.net/winapi/window-procedures/#mssage-loop
GUI は、イベントドリブン。
Win32API: GetMessage とかだろ
449421
2020/05/07(木) 16:31:19.77ID:3Zb9YKCz Win32 API は、本が古い
猫でもわかるWindowsプログラミング 第4版、2012
C言語で作るWindowsアプリ!
TCP/IPネットワークやシステムプログラミングもカバー。
Win32 APIを使ったWindowsプログラミングの集大成! !
Windows 7 / Vista / XP SP3、Visual C++ 2010対応
猫でもわかるWindowsプログラミング 第4版、2012
C言語で作るWindowsアプリ!
TCP/IPネットワークやシステムプログラミングもカバー。
Win32 APIを使ったWindowsプログラミングの集大成! !
Windows 7 / Vista / XP SP3、Visual C++ 2010対応
450デフォルトの名無しさん
2020/05/07(木) 16:34:06.54ID:qpGBsCgy それが理解できてれば、CPU利用率の話は暴論だと理解できるはずなんだが。
UIスレッドとそれ以外のスレッドとか、ちゃんと頭に浮かんでる?
UIスレッドとそれ以外のスレッドとか、ちゃんと頭に浮かんでる?
451デフォルトの名無しさん
2020/05/09(土) 00:23:11.48ID:Gxw/aWGG Rubyのチュートリアルレベルのことしかわからないのに、
他言語のスレに誰も求めてないRubyでの回答しか書けないやつにわかるとは思えない、実践経験もあるように思えないし
プログラミング言語触ってて、昔取った杵柄(しかも低レベル)は最高にかっこ悪い老害だとどうしてわからないものかね
他言語のスレに誰も求めてないRubyでの回答しか書けないやつにわかるとは思えない、実践経験もあるように思えないし
プログラミング言語触ってて、昔取った杵柄(しかも低レベル)は最高にかっこ悪い老害だとどうしてわからないものかね
452デフォルトの名無しさん
2020/05/09(土) 07:23:56.68ID:hJeCZ+pd そんなレベルの人なのか。
453デフォルトの名無しさん
2020/05/09(土) 08:57:04.20ID:jMxtkhPp レベル的には「ただのガイジ」以外の表現はないと思うけどなw
454デフォルトの名無しさん
2020/05/09(土) 09:25:46.90ID:3rxWY8lS 同意せざるを得ない
455デフォルトの名無しさん
2020/05/09(土) 11:17:54.56ID:6woZ9Gon 典型的な同族嫌悪
456デフォルトの名無しさん
2020/05/09(土) 19:33:05.24ID:hJeCZ+pd 足りない側からみたらそうなのかもな
457デフォルトの名無しさん
2020/05/10(日) 00:58:19.57ID:z54t4nMz 中小企業の業務システムをc#とsqlサーバーで作ろうとしてます
帳票発行とか商品検索システムを作る上でオススメの本やサイトがあったら教えて下さい
初心者向けの本は読破しましたがオブジェクト指向とかは理解できてないレベルです
帳票発行とか商品検索システムを作る上でオススメの本やサイトがあったら教えて下さい
初心者向けの本は読破しましたがオブジェクト指向とかは理解できてないレベルです
458デフォルトの名無しさん
2020/05/10(日) 01:08:17.42ID:LYsC+ahW >>457
適応業務は会計?SCM?
適応業務は会計?SCM?
459デフォルトの名無しさん
2020/05/10(日) 01:21:00.21ID:z54t4nMz >>458
そこら辺の言葉もよくわからんレベルなんだけど商品の物流管理や発注、出荷、売上、締め処理まで恐らくSCMなのかな
そこら辺の言葉もよくわからんレベルなんだけど商品の物流管理や発注、出荷、売上、締め処理まで恐らくSCMなのかな
460デフォルトの名無しさん
2020/05/10(日) 01:25:15.56ID:LYsC+ahW■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【ローソン】ロゴの「L」で誤解生んだコーヒーカップ、デザイン変更へ 在庫使い切る3か月後にリニューアル [ぐれ★]
- パラドゲーやってる人に聞きたい総理の発言がそのまま国家意思になるって中世かよ [279479878]
- 【高市早苗】バス会社、中国からのキャンセルで12月で2000万円~3000万円の損失へ [115996789]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- かしこいワンコっていうVtuberの子知ってる?
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
- 俺が「う~寒い寒い」って言いながらお前らが寝てるお布団に潜り込んだら…
