Quelle est la bonne technique d'avoir ThreadA le signal ThreadB d'un événement, sans avoir ThreadB sit bloqué en attendant de se produire un événement? J'ai un thread d'arrière-plan qui va remplir une liste partagée <T>. J'essaie de trouver un moyen de signaler de manière asynchrone le fil "principal" qu'il y a des données disponibles pour être collectées..NET: Comment avoir des données de fil principal de signal de fil de fond est disponible?
i envisagé de mettre un événement avec un objet EventWaitHandle, mais je ne peux pas avoir mon fil conducteur assis à une Event.WaitOne().
i considéré avoir un rappel de délégué, mais a) Je ne veux pas le thread principal faisant le travail dans le délégué: le fil doit se remettre au travail en ajoutant plus de choses - je ne veux pas attendre que le délégué s'exécute, et b) le délégué doit être rassemblé sur le thread principal, mais je ne suis pas en cours d'exécution d'une interface utilisateur, je n'ai aucun contrôle pour. Invoquer le délégué contre.
i considéré ont un rappel délégué qui commence simplement un intervalle de zéro System.Windows.Forms.Timer (avec accès du fil à l'synchronisé de la minuterie). De cette façon, le fil n'a besoin que d'être coincé comme il appelle
Timer.Enabled = true;
mais qui semble comme un hack.
Dans les temps anciens mon objet aurait créé une fenêtre cachée et avait le message de messages postaux à HWND de ces fenêtres cachées. J'ai envisagé de créer un contrôle caché, mais je comprends que vous ne pouvez pas .Invoke sur un contrôle sans aucun handle créé. De plus, je n'ai pas d'interface utilisateur: mon objet aurait pu être créé sur un serveur web, un service ou une console, je ne veux pas qu'un contrôle graphique apparaisse - et je ne veux pas non plus compiler une dépendance sur System.Windows. Formes.
je considérais avoir mon objet d'exposer une interface ISynchronizeInvoke, mais je aurais besoin de mettre en œuvre .invoke(), et c'est mon problème.
Quelle est la bonne technique d'avoir un fil fil de signal B d'un événement, sans fil B sit bloqué en attente d'un événement se produise?
la classe BackgroundWorker semble être la seule chose qui peut envoyer un NOTIFICATI de manière asynchrone sur le * thread * qui a créé l'objet. En interne, il utilise l'objet AsyncOperation en appelant asyncOperation.Post(). –