Загрузка файлов с использованием потоков

#vb.net #multithreading

#vb.net #многопоточность

Вопрос:

Я написал код для загрузки файла с использованием потока.Я разместил простой элемент управления загрузкой файлов и кнопку на странице.Код выглядит следующим образом-

 Protected Sub btnUpload_Click(ByVal sender As Object,
                               ByVal e As EventArgs) Handles btnUpload.Click
    Dim timeStart As TimeSpan = Nothing
    Dim timeEnd As TimeSpan = Nothing
    Dim timeDiff As TimeSpan = Nothing
    Dim ex As Exception = Nothing
    Dim FileNameWithoutExtension As String = String.Empty

    Try
        Dim objTh As Thread = Nothing
        objTh = New Thread(AddressOf SaveFileByBuffering)
        timeStart = DateTime.Now.TimeOfDay
        objTh.IsBackground = True


        FileNameWithoutExtension = System.IO.Path.GetFileName(FldUploadThreading.FileName)
        objTh.Start("New_"   FileNameWithoutExtension)
        objTh.Name = "ARAThreadFileBuffer"
        objTh.Join()

        timeEnd = DateTime.Now.TimeOfDay
        timeDiff = timeEnd - timeStart

    Catch exThAbort As ThreadAbortException
        ex = exThAbort
    Catch exTh As ThreadStartException
        ex = exTh
    Catch exCommon As Exception
        ex = exCommon
    End Try

End Sub
 

метод, который будет вызываться с помощью потока:

 Public Function SaveFileByBuffering(ByVal lstrFilePath As String)
    Dim bufferSize As Integer = 512
    Dim buffer As Byte() = New Byte(bufferSize - 1) {}


    Dim pathUrl As String = ConfigurationManager.AppSettings("strFilePath").ToString()

    Dim uploadObj As UploadDetail = New UploadDetail()
    uploadObj.IsReady = True
    uploadObj.FileName = lstrFilePath
    uploadObj.ContentLength = Me.FldUploadThreading.PostedFile.ContentLength

    Me.Session("UploadXDetail") = uploadObj

    Dim Upload As UploadDetail = DirectCast(Me.Session("UploadXDetail"), UploadDetail)

    Dim fileName As String = Path.GetFileName(Me.FldUploadThreading.PostedFile.FileName)

    Using fs As New FileStream(Path.Combine(pathUrl, lstrFilePath), FileMode.Create)
        While Upload.UploadedLength < Upload.ContentLength
            Dim bytes As Integer = Me.FldUploadThreading.PostedFile.InputStream.Read(buffer, 0, bufferSize)
            fs.Write(buffer, 0, bytes)
            Upload.UploadedLength  = bytes
        End While
    End Using
End Function
 

Есть две проблемы:

  1. Когда кто-то одновременно нажимает на одну и ту же кнопку, поведение потока работает по-другому, иногда происходит сбой страницы.
  2. Когда этот процесс я тестировал в многопользовательской среде с 60 пользователями, а размер файла составлял 25 МБ для каждого пользователя, страница разбилась.

У меня .net 3.5, поэтому у меня нет выбора с предварительной версией загрузки файлов в 2010 или более поздней версии.

Комментарии:

1. Это не c #, пожалуйста, используйте правильные теги и не помещайте их в заголовок

2. Любая ошибка, возникающая при сбое страницы?

3. И это ASP.Net тоже?

4. Включите оба Option Strict и Option Explicit включите. Вы должны увидеть, что строка objTh = New Thread(AddressOf SaveFileByBuffering) недопустима, поскольку для этого метода требуется параметр.

5. Сообщение об ошибке выглядит так-