Bonjour à tous,
J'ai besoin de générer une tache de fond qui exécutera certain travaux de gestion et ou d'affichage sans monopoliser le thread principal.
j'ai cherché sur le net et j'ai trouvé qlq chose de simple, de compréhensible rapidement, mais ça marche pas
http://support.microsoft.com/kb/315577/fr
Ci-dessous le code :
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
Imports System.Threading
 
Public Class Form1
 
    Private trd As Thread
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        trd = New Thread(AddressOf ThreadTask)
        trd.IsBackground = True
        trd.Start()
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show("This is the main thread")
    End Sub
 
    Private Sub ThreadTask()
        Dim stp As Integer
        Dim newval As Integer
        Dim rnd As New Random()
 
        Do
            stp = ProgressBar1.Step * rnd.Next(-1, 2)
            newval = ProgressBar1.Value + stp
            If newval > ProgressBar1.Maximum Then
                newval = ProgressBar1.Maximum
            ElseIf newval < ProgressBar1.Minimum Then
                newval = ProgressBar1.Minimum
            End If
 
            ProgressBar1.Value = newval
 
            Thread.Sleep(100)
        Loop
    End Sub
 
End Class
le Debog se lance et crash au bout d'une seconde avec cette erreur :
Opération inter-threads non valide : le contrôle 'ProgressBar1' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
je comprend bien le message d'erreur mais n'ai aucune idée pour faire en sorte que cela fonctionne, et vous ?
Patrick