Jump to content

Appliquer un résultat quand on est dans un worker


Arcy

Recommended Posts

'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 ! ;-)

Link to comment
Share on other sites

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 ;-)

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...