Je cours un BackgroundWorker et je souhaite signaler sa progression. Dans l'exemple ci-dessous, je crée une liste de tests que BackgroundWorker parcourt ensuite. Le problème réside dans la ligne 'sender.ReportProgress (i)'. Si j'ai Option Strict sur, il n'aime pas mon utilisation de 'i' en raison de problèmes de liaison tardive. Existe-t-il un autre moyen de coder ceci et d'éviter ce problème?Problème de liaison tardive avec BackgroundWorker dans VB.Net
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
' Configuring for Background Workers
Control.CheckForIllegalCrossThreadCalls = False
Dim MyList As New List(Of String)
For a As Integer = 0 To 100
MyList.Add(CStr(a))
Next
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim bgw As New System.ComponentModel.BackgroundWorker
bgw.WorkerReportsProgress = True
bgw.WorkerSupportsCancellation = True
AddHandler bgw.DoWork, AddressOf bgw_DoWork
' I create a BackgroundWorker here rather than add one in the toolbox so that I can specify the Handler and use different Handler routines for different part of a large program.
Button1.Enabled = False
Dim progress As New Progress(bgw)
progress.ShowDialog()
Button1.Enabled = True
End Sub
Private Sub bgw_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs)
For i = 0 To MyList.Count -1
Label1.Text = MyList(i)
sender.ReportProgress(i)
System.Threading.Thread.Sleep(200)
Label1.Refresh()
Next
End Sub
End Class
Public Class Progress
Private WithEvents _BGW As System.ComponentModel.BackgroundWorker
Public Sub New(ByVal BGW As System.ComponentModel.BackgroundWorker)
_BGW = BGW
InitializeComponent()
End Sub
Private Sub frmProgress_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
If Not IsNothing(_BGW) Then
_BGW.RunWorkerAsync()
End If
End Sub
Private Sub _BGW_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles _BGW.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
Label1.Text = e.ProgressPercentage
End Sub
Private Sub _BGW_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles _BGW.RunWorkerCompleted
Me.Close()
End Sub
End Class
Ce n'est pas le 'i 'avec lequel il y a un problème, c'est la méthode' ReportProgress' - 'System.Object' n'a pas une telle méthode. Il y a plusieurs autres problèmes. D'un côté, vous devriez visiter la page [tour] - vos 3 derniers posts ont 5 réponses mais tous restent ouverts car aucune réponse n'a été acceptée, – Plutonix
Merci pour vos commentaires. Quels sont les autres problèmes? OK à propos de l'acceptation - je n'avais pas réalisé que j'étais censé le faire. –