Bonjour,
Voila j'ai une application en vb.net qui fonctionne tres bien sans backgroundworker sauf sur le traitement final qui est tres gourmand et j'ai donc un gros freeze de l'interface.
Je me suis donc tourné vers le backgroundworker mais j'ai quelques difficultés.
J'ai fait mon code grâce a un tuto du site, mon code ressemble bien a celui proposé comme exemple mais j'ai quand meme l'erreur suivante lors de l'execution du traitement :
Et pour voila le code qui declare le backgroundworkerTargetInvocationException was unhandled
Une exception a été levée par la cible d'un appel.
Et les methodes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public bgw as BackgroundWorker bgw = New BackgroundWorker bgw.WorkerReportsProgress = True bgw.WorkerSupportsCancellation = True AddHandler bgw.DoWork, AddressOf bgw_DoWork AddHandler bgw.RunWorkerCompleted, AddressOf bgw_RunWorkerCompleted AddHandler bgw.ProgressChanged, AddressOf bgw_ProgressChanged
DoWork
ProcessChanged
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) rapp_pdf.Visible = True rapp_pdf.Enabled = True Dim worker As BackgroundWorker = CType(sender, BackgroundWorker) creation_rapport(worker, e) End Sub
et RunWorkerCompleted
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub bgw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) Handles bgw.ProgressChanged rapp_pdf.pgb_rapport.Value = e.ProgressPercentage End Sub
et un extrait de creation_rapport() (qui fonctionne tres bien sans backgroundworker a part le petit freeze)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Private Sub bgw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles bgw.RunWorkerCompleted rapp_pdf.Visible = False rapp_pdf.pgb_rapport.Value = 0 If rapport Then MsgBox("Le rapport a bien été créé.", , "Félicitation") 'affiche si la creation a bien été effectuée Me.Focus() Else MsgBox("Il y a eu un problème lors de la création du rapport, veuillez réessayer.", MsgBoxStyle.Exclamation & MsgBoxStyle.OkOnly, "/!\ Attention /!\") btnrapport.Visible = True btnrapport.Focus() End If bgw.CancelAsync() End Sub
Et j'ai failli oublier de vous dire que l'erreur n'indique aucune ligne dans mon code mais qu'elle survient lors de l'appel de creation_rapport()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 'chemin du fichier appXls.Workbooks.Open(cheminautre & ".xls") 'ouverture du fichier excel sheetXls = appXls.ActiveWorkbook.Worksheets("Rapport") 'valorisation des cellules worker.ReportProgress(10) With sheetXls .Range("P2").Value = txtdossier.Text .Range("P3").Value = txtmission.Text .Range("F6").Value = txtrapportautre.Text .Range("D15").Value = txtdepartement.Text .Range("C16").Value = txtcommune.Text .Range("C17").Value = txtadresse.Text .Range("B22").Value = txtlotautre.Text .Range("C20").Value = txtlocaautre.Text .Range("I20").Value = txtapptautre.Text .Range("I21").Value = txtnivautre.Text .Range("E23").Value = txtconstrautre.Text .Range("E24").Value = txtinstalautre.Text .Range("E26").Value = txtvisiteautre.Text .Range("A270").Value = txtautreconst.Text .Range("D29").Value = txttechnicien.Text .Range("A273").Value = txtautreconst.Text 'controle de l'alimentation via la checkbox du formulaire worker.ReportProgress(25) bdd_xls_pdf(chkalimautre.Checked) 'controle de la presence de constatations dans le formulaire If txtautreconst.Text = "" Or txtautreconst.Text = "Aucune" Then .Range("A76").Value = non .Range("A44").Value = non Else .Range("A76").Value = oui .Range("A44").Value = oui End If 'affichage des anomalies detectées par l'agent worker.ReportProgress(60) show_ano() 'affichage des pieces non visitées et raison worker.ReportProgress(85) show_impossibilite() End With acr = New ACRODISTXLib.PdfDistiller 'appel de la methode impression_pdf et attribution du chemin du fichier sans son extension worker.ReportProgress(100) impression_pdf(cheminautre)
mise a jour : au vue des tests que j'effectue j'ai trouvé que l'erreur etait au niveau du passage de parametre pour la progressbarre.
Dans l'attente de vos reponses
Cordialement
Nasty
Partager