Je lève un événement de C++ géré qui est géré par une application C#. Le gestionnaire d'événements C# est-il exécuté sur le même thread que celui qui a été généré depuis C++ ?? En d'autres termes, Est-ce que le blocage des événements est levé pour C++ jusqu'à ce qu'il soit complètement géré par C#?L'événement de collecte de threads est bloqué par les gestionnaires?
Répondre
L'invocation du gestionnaire d'événements est synchrone par défaut dans .NET, et puisque votre code est à la fois géré en C++ et C#, il est tout ".NET".
Si vous souhaitez que vos gestionnaires d'événements pour fonctionner de manière asynchrone, vous pouvez simplement attacher un gestionnaire sur le côté C# qui soit commence une autre Thread
pour faire le travail, laisse tomber un travailleur dans ThreadPool
, ou lorsqu'il invoque une autre méthode pour gérer le travail de manière asynchrone via un Delegate
en utilisant asynchronous programming. Le gestionnaire retournera alors rapidement, permettant au travail C# de s'exécuter en arrière-plan tandis que le code MC++ peut continuer à invoquer d'autres écouteurs de l'événement.
Assurez-vous que si vous exécutez le code qui gère réellement l'événement de manière asynchrone, le code C++ ne s'attend pas à ce que les données des arguments d'événement soient modifiées par les gestionnaires. Ce serait le cas si quelque chose comme CancelEventArgs était utilisé.
Oui. Texte supplémentaire pour contourner la limite de longueur :)
Et j'ai dû passer un test "Je suis humain"!
et ceci s'applique si je soulevais et manipulais les deux en C# ?? – bsobaid
Dans les DLL purement gérées, c'est pareil - peu importe la langue. Je ne suis pas sûr de ce que ce serait si c'était un événement non géré. –