Arcy Posté(e) le 18 décembre 2016 Partager Posté(e) le 18 décembre 2016 'jour, Je travaille sur une application qui doit capturer des touches et cette partie est terminée. private System.ComponentModel.BackgroundWorker worker = new System.ComponentModel.BackgroundWorker(); [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern int GetAsyncKeyState(Keys vKeys); public MainWindow() { worker.DoWork += new System.ComponentModel.DoWorkEventHandler(backgroundWorker_DoWork); worker.RunWorkerAsync(); } private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { bool continue = true; while (continuer) { if (GetAsyncKeyState(Keys.A) != 0) // uniquement après avoir appuyé sur A { maFonctionA(); } else [...] } } Pour que cette solution tourne en boucle, j'ai ouvert un autre thread (worker) auquel j'ai collé une boucle infinie (que je peux arrêter dans certaines circonstances). Le problème se situe après avoir appuyé sur une touche (ici, A) dans maFonctionA(), quand elle est appelée via le BackgroundWorker ... maFonctionA() { [...] } => Erreur : "Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire." Du coup, je sèche pour ce point là. Il s'agit d'une fonction essentielle qui, même si elle me bloque pas actuellement, le sera plus tard. A vos idées ! ;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Aloyse57 Posté(e) le 18 décembre 2016 Partager Posté(e) le 18 décembre 2016 Je vois plein de références sur le net parlant de "dispatcher" et "delegate"... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Arcy Posté(e) le 19 décembre 2016 Auteur Partager Posté(e) le 19 décembre 2016 Il y a 20 heures, Aloyse57 a dit : Je vois plein de références sur le net parlant de "dispatcher" et "delegate"... 'lut, J'ai également vu ce genre de contenu mais en fouillant un peu plus, certains voulait contourner ce problème en passant par un BackgroundWorker (ce que j'avais fait à la base, ça répondait pas trop à ma question ...). Du coup, via ce sujet, j'ai pu me contenter de Dispatcher.Invoke((Action)maFonctionA); Et au passage, j'ai appris l'utilité du Invoke ;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Aloyse57 Posté(e) le 19 décembre 2016 Partager Posté(e) le 19 décembre 2016 Alors, ton Keylogger est bientôt prêt ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Arcy Posté(e) le 19 décembre 2016 Auteur Partager Posté(e) le 19 décembre 2016 Tout de suite les grands mots Reste à voir le design général, un p'tit logo, une fonction à rajouter et une série de tests. Faudrait que je me mette aux tests unitaires aussi tient. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.