[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part141 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part141 http://mevius.5ch.net/test/read.cgi/tech/1544838367/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
418: デフォルトの名無しさん [sage] 2020/05/07(木) 08:09:53.53 ID: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); ?これは正常にダウンロードできます var url2 = "http://tekitou/xxx.csv"; var csv2 = "bbb.csv"; var wc2 = new WebClient(); wc2.DownloadFile(url2, csv2); ?上の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); http://mevius.5ch.net/test/read.cgi/tech/1544838367/418
420: デフォルトの名無しさん [sage] 2020/05/07(木) 08:32:15.14 ID:uSRgeDXp >>419 はい!非同期にファイルをダウンロードするメソッドです! http://mevius.5ch.net/test/read.cgi/tech/1544838367/420
425: デフォルトの名無しさん [sage] 2020/05/07(木) 09:12:23.14 ID:uSRgeDXp >>421 正直に言うとよく分かりません! 目的はwindowsフォームで作ったアプリで使う事です。 具体的には、DownloadFileCompletedイベントを使い、 ダウンロード完了を待ってCSVファイルにアクセスしたいと思いました 実はこれは成功しています。 コンソールアプリでも同様のことができないかとチャレンジしてみたのですがこの通りダメでした。 「非同期」について根本的なことが理解できていないと指摘されているのだと思ってます。 もう少し調べてみます! http://mevius.5ch.net/test/read.cgi/tech/1544838367/425
426: デフォルトの名無しさん [sage] 2020/05/07(木) 09:13:22.78 ID: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("完了"); } http://mevius.5ch.net/test/read.cgi/tech/1544838367/426
427: デフォルトの名無しさん [sage] 2020/05/07(木) 09:17:37.03 ID:uSRgeDXp >>424 visualstudioのF11を使って走らせると一応最後まで行くのが確認できます! なぜでしょう http://mevius.5ch.net/test/read.cgi/tech/1544838367/427
428: デフォルトの名無しさん [sage] 2020/05/07(木) 09:18:45.92 ID:uSRgeDXp >>423 そちらも当たってみることにします ありがとうございます http://mevius.5ch.net/test/read.cgi/tech/1544838367/428
430: デフォルトの名無しさん [sage] 2020/05/07(木) 10:52:25.34 ID: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); } なんだか胃が痛くなってきました ありがとうございました・・・ http://mevius.5ch.net/test/read.cgi/tech/1544838367/430
432: デフォルトの名無しさん [sage] 2020/05/07(木) 11:08:02.76 ID:uSRgeDXp >>431 ありがとうございました。 ダウンロード終了を待たないとそりゃ中身0バイトでしょの一言が貴重でした ちなみにですが、 https://dobon.net/vb/dotnet/internet/downloadfile.html 「.NET Framework 2.0以降で、非同期的にファイルをダウンロードし保存する」 で紹介されているC#のコードですが、ここではawaitが出てこない その理由は、 コンソールアプリと違ってフォームを表示しているメインのスレッドは勝手に終了しないから という理解でよいでしょうか? コンソールアプリだとメインで走っているスレッドはコードの最後まで行けば勝手に終わってしまう。そのため、ダウンロードに関わっているスレッドもそれに引きずられて終わってしまう と考えたのですが・・・ http://mevius.5ch.net/test/read.cgi/tech/1544838367/432
433: デフォルトの名無しさん [sage] 2020/05/07(木) 11:15:54.73 ID:uSRgeDXp >>418の?でうまくいったのは、 たまたま非同期が前、同期が後の順番だったため、同期が終わるまでプログラム全体が終了せず その間に非同期のほうも無事にダウンロードできたという事で・・・? サーバー側の都合で同時に同じファイルのダウンロードは認められず、先に要求のあった非同期が終わるまで同期のほうが始まらなかったとか http://mevius.5ch.net/test/read.cgi/tech/1544838367/433
437: デフォルトの名無しさん [sage] 2020/05/07(木) 13:46:41.90 ID: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の?で順番を逆にしたら期待通りの結果が得られました 解決です http://mevius.5ch.net/test/read.cgi/tech/1544838367/437
442: デフォルトの名無しさん [sage] 2020/05/07(木) 15:03:36.84 ID:uSRgeDXp >>438-440 大変ありがとうございます しっかりと調べた方がよさそうなキーワードが盛りだくさんです 今から出かけるので帰ってから取りかかろうと思います まだまだ奥が深そうですね! http://mevius.5ch.net/test/read.cgi/tech/1544838367/442
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.586s*