Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Проблемы с WebClient.OpenWriteAsync Добавлено: 08.09.11 10:29  

Автор вопроса:  ---Fix--- | ICQ: 348680795 
Имеется большой файл 10-50 мб. Нужно отправить данные файла на сервак и получить ответ. Из-за больших размеров не могу использовать методы без использования stream. Я открываю запрос в новом потоке (thread), оттуда считываю файл кусками и отправляю на сервак.
Но код очень странно выполняется. Во первых не срабатывают события связанные с приемом и отправкой данных, во вторых не смотря на то что я открываю и закрываю Stream в новом Thread основной поток зависает при Stream.close, даже если файл размером 1 мб

Imports System.Net, System.IO, System.Text

    Private Sub evtUploadDataChanged(ByVal sender As Object, ByVal e As UploadProgressChangedEventArgs)
        Try
            Progress1.Value = e.ProgressPercentage
            Me.Text = "Total received Content-Length: " & e.TotalBytesToReceive
        Catch ex As Exception
            MessageBox.Show(ex.Message & Environment.NewLine & e.TotalBytesToReceive)
        End Try
    End Sub

    Private Sub evtUploadDataComleted(ByVal sender As Object, ByVal e As UploadDataCompletedEventArgs)
        Try
            Me.Text &= "Total received bytes: " & e.Result.Length
            Dim RecieveData As Byte()
            RecieveData = e.Result
            Dim MS As New MemoryStream(RecieveData)
            Dim SR As New StreamReader(MS)
            Dim BR As New System.IO.BinaryReader(MS)


            txtTest.Text = BR.ReadInt32.ToString
            txtTest.Text += SR.ReadToEnd
            SR.Close()
            BR.Close()
            MS.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message & Environment.NewLine & e.Result.ToString)
        End Try
    End Sub

    Private Sub evtDownloadDataChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs)
        Progress2.Value = e.ProgressPercentage
    End Sub
    Private Sub evtOpenWriteCompleted(ByVal sender As System.Object, ByVal e As OpenWriteCompletedEventArgs)
        'Try
        Dim Buffer As Integer = 500000
        Dim b(Buffer - 1) As Byte

        'PostData = BigData.ToString
        Dim FS As New FileStream("MyFile.big", FileMode.Open, FileAccess.Read)
        Do While FS.Read(b, 0, Buffer) > 0
            e.Result.Write(b, 0, b.Length)
        Loop
        e.Result.Close()
        'Catch ex As Exception
        'MessageBox.Show(ex.Message)
        'End Try
    End Sub

    Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
        Dim Adress As New Uri("http://188.40.21.40/chronotable/binaryhttp.php")
        Dim Web As New Net.WebClient
        Web.Headers.Add("Content-Transfer-Encoding: binary")

        AddHandler Web.UploadProgressChanged, AddressOf evtUploadDataChanged
        AddHandler Web.UploadDataCompleted, AddressOf evtUploadDataComleted
        AddHandler Web.DownloadProgressChanged, AddressOf evtDownloadDataChanged
        AddHandler Web.OpenWriteCompleted, AddressOf evtOpenWriteCompleted

        Web.OpenWriteAsync(Adress, "POST")

    End Sub

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 ---Fix---



ICQ: 348680795 

Вопросов: 12
Ответов: 33
 Профиль | | #1 Добавлено: 08.09.11 11:45
Для уточнения:
1)Сервер принимает файл, т.е от клиента все же приходят данные
2)подвисание происходит в строке
  1. e.Result.Close()
скорее всего из-за отправки данных, но метод то выполняться должен асинхронно, почему не так?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам