Я написал бок о бок COM DLL на C#. Я использую эту DLL в VB6.Тема в SxS C# COM DLL делает вызывающее приложение невосприимчивым
COM DLL содержит нить. Как только я запускаю этот поток, вызывающее приложение (в моем случае VB6) блокирует (что означает, что я больше ничего не могу в нем).
Я начинаю нить вроде этого:
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 приходит от этого:
namespace System.Threading
{
[ComVisible(true)]
public delegate void ThreadStart();
}
это нормально, что вызывающее приложение перестает отвечать на запросы? Я думал, что, поскольку это другая тема, это не сделало бы этого.
** 1. ** Не уверен, поможет ли это, но поскольку вы имеете дело с COM здесь, может быть хорошей идеей явно установить состояние квартиры для созданного потока (перед его запуском) с помощью [ '_startMasterThread.SetApartmentState'] (https://msdn.microsoft.com/en-us/library/system.threading.thread.setapartmentstate.aspx" Справочная страница MSDN "). ** 2. ** (Не по теме :) DLL не может «содержать» поток; код в DLL может * создать * и/или * запустить * поток. – stakx