#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
Есть две проблемы:
- Когда кто-то одновременно нажимает на одну и ту же кнопку, поведение потока работает по-другому, иногда происходит сбой страницы.
- Когда этот процесс я тестировал в многопользовательской среде с 60 пользователями, а размер файла составлял 25 МБ для каждого пользователя, страница разбилась.
У меня .net 3.5, поэтому у меня нет выбора с предварительной версией загрузки файлов в 2010 или более поздней версии.
Комментарии:
1. Это не c #, пожалуйста, используйте правильные теги и не помещайте их в заголовок
2. Любая ошибка, возникающая при сбое страницы?
3. И это ASP.Net тоже?
4. Включите оба
Option Strict
иOption Explicit
включите. Вы должны увидеть, что строкаobjTh = New Thread(AddressOf SaveFileByBuffering)
недопустима, поскольку для этого метода требуется параметр.5. Сообщение об ошибке выглядит так-