Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème d'utilisation de dll dans Visual C# .Net

1 réponse
Avatar
Fabien
Bonjour,

J'ai rencontré un problème lors de l'utilisation d'une dll dans Visual C#
.Net. J'utilise la méthode d'un objet COM créé en matlab que j'ai intégré
dans mon code C# dans Visual Studio .Net. Cette méthode est appelé dans un
Thread, le calcul qu'elle effectue est assez coûteux, il prend entre 0 et 6
secondes. Mon problème est que lorsque j'appelle cette méthode dans un Thread
tous les autres Threads sont bloqués et ne peuvent continuer uniquement
lorsque le résultat de la méthode de la dll est retourné. Donc durant 0 à 6
secondes toute mon application est stoppé et ne peut rien effecuter d'autre
que l'exécution de la méthode de la dll. J'ai essayé de changer les priorités
des Threads, de mettre le Thread qui bloque l'application en background ou
d'insérer des Sleep à interales réguliers par l'utilisation de Timers (le
timer reste aussi inactif durant le calcul), mais ça ne change rien, mon
application est toujours bloqué lors du clacul.
Que dois-je faire pour que le reste de mon application soit indépendant de
ce Thread et continue à s'exécuter lors du calcul effecuté par la dll.

D'avance merci pour votre réponse.

Fabien

1 réponse

Avatar
Nicolas Moreau [MS]
Bonjour,
Le framework .NET est fait pour répondre à ce genre de problématique :
- Comment gérer l'appel à des traitements potentiellement longs ? Et éviter
les interfaces qui se bloquent, permettre de lancer plusieurs appels, etc...

Une solution (qui n'est pas la bonne) consiste à démarrer un thread à la
main, et de faire ce que tu explique.
L'autre solution (la bonne cette fois ci) consiste à utiliser le Pattern
"Asynchronous Invocation" standard de .NET.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconasynchronousexecution.asp

Dans la continuité de cette solution, un Application Block vise à étendre ce
mécanisme :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/PAIBlock.asp

Cordialement.
Nicolas Moreau
Microsoft Services France.


"Fabien" a écrit dans le message de news:

Bonjour,

J'ai rencontré un problème lors de l'utilisation d'une dll dans Visual C#
.Net. J'utilise la méthode d'un objet COM créé en matlab que j'ai intégré
dans mon code C# dans Visual Studio .Net. Cette méthode est appelé dans un
Thread, le calcul qu'elle effectue est assez coûteux, il prend entre 0 et
6
secondes. Mon problème est que lorsque j'appelle cette méthode dans un
Thread
tous les autres Threads sont bloqués et ne peuvent continuer uniquement
lorsque le résultat de la méthode de la dll est retourné. Donc durant 0 à
6
secondes toute mon application est stoppé et ne peut rien effecuter
d'autre
que l'exécution de la méthode de la dll. J'ai essayé de changer les
priorités
des Threads, de mettre le Thread qui bloque l'application en background ou
d'insérer des Sleep à interales réguliers par l'utilisation de Timers (le
timer reste aussi inactif durant le calcul), mais ça ne change rien, mon
application est toujours bloqué lors du clacul.
Que dois-je faire pour que le reste de mon application soit indépendant de
ce Thread et continue à s'exécuter lors du calcul effecuté par la dll.

D'avance merci pour votre réponse.

Fabien