Opérations inter-threads entre deux classes
Bonjour à tous,
J'ai créé un programme dans lequel je souhaiterais lancer les calculs de plusieurs modèles simultanément sur plusieurs threads. Pour cela j'utilise un MainForm qui gère l'affichage utilisateur et une classe Modèle à partir de laquelle sont instanciés mes modèles. J'aimerais que chaque modèle puisse effectuer ses calculs sur son propre thread, et pouvoir en même temps récupérer les informations de ces calculs sur ma MainForm.
Pour l'instant, mon code est le suivant :
Code:
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 45 46 47
| Imports System.Threading
'Interface utilisateur
Public Class MainForm
Inherits Form
Public Label1 As Windows.Forms.Label
Public Label2 As Windows.Forms.Label
Private Sub MainForm_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim monModele1 As New Modele(Label1)
Dim monModele2 As New Modele(Label2)
'...
End Sub
End Class
'Modèle de calcul
Public Class Modele
Delegate Sub ChangeTextDelegate(ByVal text As String)
Private m_Thread As Thread
Private m_Label As Windows.Forms.Label
Public Sub New(ByVal Label As Windows.Forms.Label)
m_Label = Label
m_Thread = New Thread(AddressOf Calcul)
m_Thread.Start()
End Sub
Public Sub Calcul()
'mes gros calculs
Dim i As Integer = 0
Do
i += 1
MainForm.Invoke(New ChangeTextDelegate(AddressOf ChangeText), "Itération " & i)
Thread.Sleep(100)
Loop While i < 100000
End Sub
Public Sub ChangeText(ByVal text As String)
m_Label.Text = text
End Sub
End Class |
Seulement quand j'exécute ce code, j'ai une erreur au niveau de la ligne :
Code:
MainForm.Invoke(New ChangeTextDelegate(AddressOf ChangeText), "Itération " & i)
qui me dit :
Citation:
Une erreur s'est produite lors de la création du formulaire.
Pour plus d'informations, consultez Exception.InnerException.
L'erreur est : Impossible d'instancier le contrôle ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2',
car le thread actuel n'est pas un thread cloisonné (STA, Single-Threaded Apartment).
Y-a-t-il une solution pour résoudre ce problème ou est-il impossible d'effectuer des opérations inter-threads entre deux classes ?
Merci !