Имеется большой файл 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
 
 
Ответить
        |