8
votes

Fonctionnement transversal non valide: contrôle accédé à partir d'un fil autre que le thread qui a été créé sur

J'écris une application Windows FileWatcher qui recherchera des modifications dans un dossier spécifié, puis enregistre les détails dans un fichier TXT.

J'ai suivi exactement ce qui est mentionné dans cet article ci-dessous http://www.codeproject.com/kb/dotnet/folderwatcher.aspx

Lorsque je touche F5 de mon application, puis créez ou modifiez un fichier dans le dossier qui est regardé, il jette l'erreur mentionnée ci-dessous.

aide s'il vous plaît

Fonctionnement transversal non valide: Contrôle 'TxtfolderActivity' accédée à partir d'un fil autre que le fil qu'il a été créé.


0 commentaires

3 Réponses :


12
votes

Vous devez utiliser la méthode Invoke sur le formulaire E.G. Avec un délégué anonyme pour rendre vos modifications de réaction à l'événement.

Le gestionnaire d'événements est élevé avec un autre fil. Ce 2e thread ne peut pas accéder à des contrôles de votre formulaire. Il doit "l'invoquer" de laisser le thread de tous les travaux de contrôle qui les ont créés initialement.

au lieu de: xxx

Vous devez écrire: xxx


1 commentaires

+1 - Je dois essayer de résoudre ce problème, car il est considérablement plus simple que mon approche actuelle.



5
votes

Vous essayez de mettre à jour l'interface utilisateur d'un fil non-UI. L'interface utilisateur a une affinité de fil et ne peut être mise à jour que d'un fil qui l'a créé. Si vous utilisez des winforms, consultez Comment: faire des appels de fil à threads à Windows Contrôles de formulaires Article MSDN. Fondamentalement, vous devrez mettre à jour l'interface utilisateur via Control.invoke méthode. Pour WPF, vous devez utiliser DisternerObject .


0 commentaires

1
votes

Fondamentalement, vous devez avoir deux threads dans votre application, au moins, et le fil que votre logique de contrôle est différent, vous obtenez donc cette erreur, car les commandes ne sont pas threadsafe.

Ceci est de vous protéger des problèmes pouvant être causés par plusieurs threads modifiant le même contrôle en même temps.

Vous pouvez trouver considérablement plus de détails en regardant ici: http://msdn.microsoft.com/fr- US / Bibliothèque / MS171728% 28VS.80% 29.aspx


0 commentaires