J'ai écrit une DLL COM côte à côte en C#. J'utilise cette DLL en VB6.Thread dans SxS C# DLL DLL rend l'application appelante non répondante
La DLL COM contient un thread. Dès que je démarre ce thread, l'application appelante (dans mon cas VB6) se bloque (ce qui signifie que je ne peux plus rien y faire).
Je commence le fil comme celui-ci:
private Thread _startMasterThread;
public void Init()
{
if (_startMasterThread == null)
{
_startMasterThread = new Thread(new ThreadStart(pMasterThread));
_startMasterThread.Priority = ThreadPriority.Highest;
_startMasterThread.Start();
}
}
private void pMasterThread()
{
while (!_bAbortAll)
{
//do something
}
}
ThreadStart vient de ceci:
namespace System.Threading
{
[ComVisible(true)]
public delegate void ThreadStart();
}
Est-il normal que l'application appelante ne répond plus? Je pensais que puisque c'est un fil différent, il ne le ferait pas.
** 1. ** Vous ne savez pas si cela vous aidera, mais comme vous avez affaire à COM ici, il peut être judicieux de définir explicitement l'état de l'appartement pour le thread créé (avant de le démarrer) via [ '_startMasterThread.SetApartmentState'] (https://msdn.microsoft.com/en-us/library/system.threading.thread.setapartmentstate.aspx" page de référence MSDN "). ** 2. ** (Hors sujet :) Une DLL ne peut pas "contenir" un thread; le code dans la DLL peut * créer * et/ou * démarrer * un thread. – stakx