Control.CheckForIllegalCrossThreadCalls = False, si ce contrôle existe c'est pas pour rien.
backgroundWorker1.ReportProgress(-1, Resultatfinal)
If e.ProgressPercentage = -1 Then lblDownloadedBytes.Text = e.UserState.ToString & " Mo" Return End if
Private leDispatcher As Dispatcher = Dispatcher.CurrentDispatcher Private Sub backgroundWorker1_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) leDispatcher.Invoke ( New Action ( Sub() label1.Text = "Coucou depuis le thead" ) ) End Sub
Imports System.Net Public Class MJ Private Sub MJ_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim newFolder As New FolderBrowserDialog Control.CheckForIllegalCrossThreadCalls = False txtSavePath.Text = newFolder.SelectedPath bWorker.RunWorkerAsync() End Sub Private Sub bWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bWorker.DoWork Dim buffer(1023) As Byte Dim bytesIn As Integer Dim totalBytesIn As Integer Dim output As IO.Stream Dim flLength As Integer Dim Resultat As Integer Dim Resultatfinal As Integer Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePath.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsername.Text, txtFTPPassword.Text) FTPRequest.Method = Net.WebRequestMethods.Ftp.GetFileSize flLength = CInt(FTPRequest.GetResponse.ContentLength) lblFileSize.Location = New Point(574, 260) Resultatfinal = flLength / 1048576 lblFileSize.Text = flLength & " Mo" Catch ex As Exception End Try Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePath.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsername.Text, txtFTPPassword.Text) FTPRequest.Method = WebRequestMethods.Ftp.DownloadFile Dim stream As System.IO.Stream = FTPRequest.GetResponse.GetResponseStream Dim OutputFilePath As String = Application.StartupPath & "\" & IO.Path.GetFileName(txtFilePath.Text) output = System.IO.File.Create(OutputFilePath) bytesIn = 1 Do Until bytesIn < 1 bytesIn = stream.Read(buffer, 0, 1024) If bytesIn > 0 Then output.Write(buffer, 0, bytesIn) totalBytesIn += bytesIn Resultat = totalBytesIn / 1048576 lblDownloadedBytes.Text = Resultat.ToString & " Mo" If flLength > 0 Then Dim perc As Integer = (totalBytesIn / flLength) * 100 bWorker.ReportProgress(-1, Resultat) End If End If Loop output.Close() stream.Close() Catch ex As Exception ErreurMessage(ex.Message) End Try End Sub Private Sub bWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bWorker.ProgressChanged If e.ProgressPercentage = -1 Then lblDownloadedBytes.Text = e.UserState.ToString & " Mo" Return End If End Sub Private Sub bWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bWorker.RunWorkerCompleted Try If IO.File.Exists("VoxaiUpdater.exe") Then My.Computer.FileSystem.RenameFile(Application.StartupPath & "\Voxai.exe", "Voxai(null).exe") My.Computer.FileSystem.RenameFile(Application.StartupPath & "\VoxaiUpdater.exe", "Voxai.exe") Process.Start("Voxai.exe") Me.Close() Else ErreurMessage("Erreur lors de l'installation de la mise à jour Voxai") Me.Close() End If Catch ex As Exception ErreurMessage("Erreur lors de l'installation de la mise à jour Voxai") Me.Close() End Try FonctionMessage("Téléchargement terminer !") End Sub End Class
Private Sub bWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bWorker.ProgressChanged If e.ProgressPercentage = -1 Then lblDownloadedBytes.Text = e.UserState.ToString & " Mo" Return End If 'code qui affiche la progression End Sub
FonctionMessage("Téléchargement terminer !")terminé
Imports System.Net Public Class MJ Private Sub MJ_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim newFolder As New FolderBrowserDialog Control.CheckForIllegalCrossThreadCalls = False txtSavePath.Text = newFolder.SelectedPath bWorker.RunWorkerAsync() End Sub Private Sub bWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bWorker.DoWork Dim buffer(1023) As Byte Dim bytesIn As Integer Dim totalBytesIn As Integer Dim output As IO.Stream Dim flLength As Integer Dim Resultat As Integer Dim Resultatfinal As Integer Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePath.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsername.Text, txtFTPPassword.Text) FTPRequest.Method = Net.WebRequestMethods.Ftp.GetFileSize flLength = CInt(FTPRequest.GetResponse.ContentLength) lblFileSize.Location = New Point(574, 260) Resultatfinal = flLength / 1048576 lblFileSize.Text = Resultatfinal & " Mo" Catch ex As Exception ErreurMessage(ex.Message) End Try Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePath.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsername.Text, txtFTPPassword.Text) FTPRequest.Method = WebRequestMethods.Ftp.DownloadFile Dim stream As System.IO.Stream = FTPRequest.GetResponse.GetResponseStream Dim OutputFilePath As String = Application.StartupPath & "\" & IO.Path.GetFileName(txtFilePath.Text) output = System.IO.File.Create(OutputFilePath) bytesIn = 1 Do Until bytesIn < 1 bytesIn = stream.Read(buffer, 0, 1024) If bytesIn > 0 Then output.Write(buffer, 0, bytesIn) totalBytesIn += bytesIn Resultat = totalBytesIn / 1048576 lblDownloadedBytes.Text = Resultat.ToString & " Mo" If flLength > 0 Then Dim perc As Integer = (totalBytesIn / flLength) * 100 bWorker.ReportProgress(-1, Resultat) End If End If Loop output.Close() stream.Close() Catch ex As Exception ErreurMessage(ex.Message) End Try End Sub Private Sub bWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bWorker.ProgressChanged If e.ProgressPercentage = -1 Then lblDownloadedBytes.Text = e.UserState.ToString & " Mo" Return End If pBar.Value = e.ProgressPercentage lblPercent.Text = e.ProgressPercentage.ToString & "%" End Sub Private Sub bWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bWorker.RunWorkerCompleted Try If IO.File.Exists("VoxaiUpdater.exe") Then My.Computer.FileSystem.RenameFile(Application.StartupPath & "\Voxai.exe", "Voxai(null).exe") My.Computer.FileSystem.RenameFile(Application.StartupPath & "\VoxaiUpdater.exe", "Voxai.exe") Process.Start("Voxai.exe") Me.Close() Else ErreurMessage("Erreur lors de l'installation de la mise à jour Voxai") Me.Close() End If Catch ex As Exception ErreurMessage("Erreur lors de l'installation de la mise à jour Voxai") Me.Close() End Try FonctionMessage("Téléchargement terminer !") End Sub End Class
Imports System.Net Public Class MJ Private Sub MJ_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim newFolder As New FolderBrowserDialog Control.CheckForIllegalCrossThreadCalls = False txtSavePath.Text = newFolder.SelectedPath bWorker.RunWorkerAsync() End Sub Private Sub bWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bWorker.DoWork Dim buffer(1023) As Byte Dim bytesIn As Integer Dim totalBytesIn As Integer Dim output As IO.Stream Dim flLength As Integer Dim Resultat As Integer Dim Resultatfinal As Integer Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePath.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsername.Text, txtFTPPassword.Text) FTPRequest.Method = Net.WebRequestMethods.Ftp.GetFileSize flLength = CInt(FTPRequest.GetResponse.ContentLength) lblFileSize.Location = New Point(574, 260) Resultatfinal = flLength / 1048576 lblFileSize.Text = Resultatfinal & " Mo" Catch ex As Exception ErreurMessage(ex.Message) End Try Try Dim FTPRequest As FtpWebRequest = DirectCast(WebRequest.Create(txtFilePath.Text), FtpWebRequest) FTPRequest.Credentials = New NetworkCredential(txtFTPUsername.Text, txtFTPPassword.Text) FTPRequest.Method = WebRequestMethods.Ftp.DownloadFile Dim stream As System.IO.Stream = FTPRequest.GetResponse.GetResponseStream Dim OutputFilePath As String = Application.StartupPath & "\" & IO.Path.GetFileName(txtFilePath.Text) output = System.IO.File.Create(OutputFilePath) bytesIn = 1 Do Until bytesIn < 1 bytesIn = stream.Read(buffer, 0, 1024) If bytesIn > 0 Then output.Write(buffer, 0, bytesIn) totalBytesIn += bytesIn Resultat = totalBytesIn / 1048576 If flLength > 0 Then Dim perc As Integer = (totalBytesIn / flLength) * 100 bWorker.ReportProgress(-1, Resultat) End If End If Loop output.Close() stream.Close() Catch ex As Exception ErreurMessage(ex.Message) End Try End Sub Private Sub bWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles bWorker.ProgressChanged If e.ProgressPercentage = -1 Then lblDownloadedBytes.Text = e.UserState.ToString & " Mo" Return End If pBar.Value = e.ProgressPercentage lblPercent.Text = e.ProgressPercentage.ToString & "%" End Sub Private Sub bWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bWorker.RunWorkerCompleted Try If IO.File.Exists("VoxaiUpdater.exe") Then My.Computer.FileSystem.RenameFile(Application.StartupPath & "\Voxai.exe", "Voxai(null).exe") My.Computer.FileSystem.RenameFile(Application.StartupPath & "\VoxaiUpdater.exe", "Voxai.exe") Process.Start("Voxai.exe") Me.Close() Else ErreurMessage("Erreur lors de l'installation de la mise à jour Voxai") Me.Close() End If Catch ex As Exception ErreurMessage("Erreur lors de l'installation de la mise à jour Voxai") Me.Close() End Try FonctionMessage("Téléchargement terminer !") End Sub End Class
23 avril 2018 à 19:37
Déjà merci pour m'avoir dis comment mettre le code en basic.
Revenons au code, quand je supprime il me met cette erreur :
Opération inter-threads non valide : le côntrole 'IblDownloadBytes' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
Merci d'avance pour votre réponse.