SxS中的线程C#COM DLL使调用应用程序无响应

时间:2015-03-10 07:21:48

标签: c# multithreading dll native side-by-side

我在C#中编写了一个并排的COM DLL。 我在VB6中使用这个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 个答案:

答案 0 :(得分:0)

看起来您创建了一个STA线程,然后忽略了为消息泵提供服务。呼叫者将阻止,因为没有人响应他们的消息。因此,UI(调用者)冻结(阻止)。

一些陈旧但高度相关的文章:

阅读完这些内容并了解问题后,解决方案将是显而易见的。切换到MTA或在您的主题中运行消息泵。