Posted December 18, 20168 yr '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 ! ;-)
December 18, 20168 yr Je vois plein de références sur le net parlant de "dispatcher" et "delegate"...
December 19, 20168 yr Author 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 ;-)
December 19, 20168 yr Author 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.
Archived
This topic is now archived and is closed to further replies.