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

ツリー一括表示

Nomalアイコン WebClientで、短期間にDownloadStringAsyncを実行したい /VBはじめました (19/10/29(Tue) 11:48) #34345
Nomalアイコン Re[1]: WebClientで、短期間にDownloadStringAsyncを実行したい /shu (19/11/07(Thu) 08:49) #34370
  └Nomalアイコン Re[2]: WebClientで、短期間にDownloadStringAsyncを実行したい /VBはじめました (19/11/07(Thu) 10:14) #34371 解決み!


親記事 / ▼[ 34370 ]
■34345 / 親階層)  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


違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 34345 ] / ▼[ 34371 ]
■34370 / 1階層)  Re[1]: WebClientで、短期間にDownloadStringAsyncを実行したい
□投稿者/ shu 大御所(489回)-(2019/11/07(Thu) 08:49:19)
  • アイコンNo34345に返信(VBはじめましたさんの記事)

    WebClientのインスタンスを別に作るのでは
    うまくいきませんでしょうか?
違反を報告
[ 親 34345 / □ Tree ] 返信 削除キー/

▲[ 34370 ] / 返信無し
■34371 / 2階層)  Re[2]: WebClientで、短期間にDownloadStringAsyncを実行したい
□投稿者/ VBはじめました 一般人(16回)-(2019/11/07(Thu) 10:14:24)
  • アイコンshuさん お返事有難う御座います

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

    有難うございました。
解決み!
違反を報告
[ 親 34345 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -