DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34345 / inTopicNo.1)  WebClientで、短期間にDownloadStringAsyncを実行したい
  
□投稿者/ VBはじめました 一般人(10回)-(2019/10/29(Tue) 11:48:38)
  • アイコン環境/言語:[VB.net] 
    分類:[.NET] 

    Webから、Htmlデータをダウンロードするプログラムを作ろうとしています。
    どうしても、Completedする前に、別のページのダウンロードを始める(その場合、ダウンロード中のデータは破棄してよい)必要があります。

    DownloadStringAsyncの前にCancelAsyncを実行すれば可能かと思ったのですが、
    System.NotSupportedException: 'WebClient は同時 I/O 操作をサポートしません。'とエラーが発生します。

    但し、キャンセル場合もあります。(不安定)
    どのようにすれば、確実にキャンセルできるのでしょうか?
    詳しい方いらっしゃいまいたら教えてください。
    サンプルのコードは下記になります。(フォームにボタン一つ貼り付けている)
    3回に一回ぐらいは成功する

    Imports System.Net
    Imports System.Text

    Public Class Form1
    Dim myUri As Uri = New Uri("https://www.yahoo.co.jp/")
    Dim HtmlData As String
    WithEvents myWebClient As New WebClient
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    myWebClient.Encoding = Encoding.UTF8
    myWebClient.DownloadStringAsync(myUri)
    myWebClient.CancelAsync()
    myWebClient.DownloadStringAsync(myUri) ←ここでエラー発生!
    End Sub
    Private Sub myWebClient_DownloadStringCompleted(sender As Object, e As DownloadStringCompletedEventArgs) Handles myWebClient.DownloadStringCompleted
    If e.Error Is Nothing Then
    HtmlData = CStr(e.Result)
    MsgBox(HtmlData.Substring(0, 1000))
    ElseIf e.Cancelled Then
    MsgBox("キャンセルボタンが押されました。")
    End If
    End Sub
    End Class


マルチポストを報告
違反を報告
引用返信 削除キー/
■34370 / inTopicNo.2)  Re[1]: WebClientで、短期間にDownloadStringAsyncを実行したい
□投稿者/ shu 大御所(489回)-(2019/11/07(Thu) 08:49:19)
  • アイコンNo34345に返信(VBはじめましたさんの記事)

    WebClientのインスタンスを別に作るのでは
    うまくいきませんでしょうか?
違反を報告
引用返信 削除キー/
■34371 / inTopicNo.3)  Re[2]: WebClientで、短期間にDownloadStringAsyncを実行したい
□投稿者/ VBはじめました 一般人(16回)-(2019/11/07(Thu) 10:14:24)
  • アイコンshuさん お返事有難う御座います

    IsBusyで状態を確認してmyWebClient.CancelAsync()を
    実行していましがた。どうしても、ロストするので、
    shuさんのおっしゃる通り、コストがかかっても
    インスタンスを新しく作ることにします。

    有難うございました。
解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -