2010-03-05 3 views
3

Voici mon problème: J'ai une DLL non managée que j'ai faite. J'appelle l'une des fonctions de cette DLL dans mon code C#, en utilisant PInvoke. Sous certaines conditions, dans la fonction dll, je veux être en mesure de terminer le thread qui exécute la fonction.Comment pourrais-je réaliser cela?Fonction en cours d'exécution à partir d'une DLL non gérée dans un thread C#

Désolé s'il est une question stupide, mais je suis un noob totale en ce qui concerne le filetage :)

+0

Vous avez un thread en cours d'exécution que vous voulez supprimer d'un autre thread? Ou vous ne savez pas comment nettoyer un fil que vous avez commencé? –

+0

Je cours une fonction potentiellement dangereuse dans un thread séparé pour éviter de corrompre la pile de mon thread principal. Je ne sais pas comment passer un message au thread principal si un problème se produit, alors je cherchais un moyen de tuez le fil corrompu. –

Répondre

3

L'homme, cela semble dangereux. Pourquoi terminer le fil? Vous pourriez être dans un fil que vous ne possédez pas en fonction de la façon dont vous organisez l'appel. De toute façon, il semble que votre meilleure option est de retourner quelque chose pour indiquer que vous voulez mettre fin au thread et que le code managé le gère avec élégance. N'essayez pas de tuer le thread dans le code natif.

3

Si je vous comprends bien, votre situation est comme ça (à l'aide pseudocode par souci de concision)

C# 
== 

Main() 
{ 
    StartNewThread(MyThread); 
    DoStuff(); 
} 

MyThread() 
{ 
    UnmanagedDll.DoSomething(); 
} 

Unmanaged DLL 
============= 
DoSomething() 
{ 
    // Does something here 
} 

Est-ce correct? Si tel est le cas, le retour de UnmanagedDll.DoSomething() provoquera l'arrêt du thread appelant s'il n'y a aucune instruction après l'appel de UnmanagedDll.DoSomething(). Donc, retournez simplement le contrôle au programme C#.

Si ce n'est pas votre cas, veuillez fournir plus de détails.

0

Je voudrais renvoyer un résultat spécial de la fonction DLL non managée et (ayant détecté la valeur de retour spéciale) terminer le thread dans C#. Terminer dans la DLL semble être une très mauvaise idée pour moi.

Questions connexes