VB.NET проект многопоточность - PullRequest
0 голосов
/ 19 сентября 2019
If ServerVersion > localVersion Then

                Net.ServicePointManager.DefaultConnectionLimit = 20

                Dim url As New Uri(sUrlToReadFileFrom)

                Dim request As System.Net.HttpWebRequest = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
                Dim response As System.Net.HttpWebResponse = CType(request.GetResponse(), System.Net.HttpWebResponse)
                response.Close()

                Dim iSize As Int64 = response.ContentLength

                Dim iRunningByteTotal As Int64 = 0

                Using client As New System.Net.WebClient()
                    Using streamRemote As System.IO.Stream = client.OpenRead(New Uri(sUrlToReadFileFrom))
                        Using streamLocal As Stream = New FileStream(sFilePathToWriteFileTo, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None)
                            Dim iByteSize As Integer = 0
                            Dim byteBuffer(iSize - 1) As Byte
                            iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)
                            Do While iByteSize > 0


                                streamLocal.Write(byteBuffer, 0, iByteSize)
                                iRunningByteTotal += iByteSize


                                Dim dIndex As Double = CDbl(iRunningByteTotal)
                                Dim dTotal As Double = CDbl(byteBuffer.Length)
                                Dim dProgressPercentage As Double = (dIndex / dTotal)
                                Dim iProgressPercentage As Integer = CInt(Math.Truncate(dProgressPercentage * 100))

                                bgDownloader.ReportProgress(iProgressPercentage)
                                iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)
                            Loop

                            streamLocal.Close()
                        End Using

                        streamRemote.Close()
                    End Using

            End If

Использование приведенного выше кода в BackgroundWorker в проекте VB.NET WPF.Когда я пытаюсь запустить код, возникает ошибка.

Вызывающий поток не может получить доступ к этому объекту, поскольку он принадлежит другому потоку.

Этот код отлично работает в проекте WinFormsбез каких-либо правок / изменений.

1 Ответ

0 голосов
/ 19 сентября 2019

Спасибо @ Cruled за предоставление подсказки.Это было исправлено.Что я сделал, так это добавление вызовов на все вещи, требующие обновления.

...