c++/cli程序集加载生成多个CLR线程的C#组件;如何阻止这些线程重新进入C++/CLI入口点?

c++/cli程序集加载生成多个CLR线程的C#组件;如何阻止这些线程重新进入C++/CLI入口点?,c#,multithreading,winapi,c++-cli,C#,Multithreading,Winapi,C++ Cli,我有一个C/C++应用程序,其架构包括以下组件 本机C/C++应用程序(单线程消息泵,典型的Win32 UI应用程序),静态链接(2) 本机C/C++Lib/DLL,在运行时动态加载(3) 用/clr编译的C++/CLI DLL,它封装了C#程序集(4) 一种C#程序集,使用TPL并具有后台计时器,所有这些都通过静态单例方法公开 我的问题是:C#assembly生成异步I/O线程以响应来自父应用程序的调用,并在后台使用一对System.Threading.Timer实例 这些线程一直在连接本机C

我有一个C/C++应用程序,其架构包括以下组件

  • 本机C/C++应用程序(单线程消息泵,典型的Win32 UI应用程序),静态链接(2)
  • 本机C/C++Lib/DLL,在运行时动态加载(3)
  • 用/clr编译的C++/CLI DLL,它封装了C#程序集(4)
  • 一种C#程序集,使用TPL并具有后台计时器,所有这些都通过静态单例方法公开
  • 我的问题是:C#assembly生成异步I/O线程以响应来自父应用程序的调用,并在后台使用一对System.Threading.Timer实例

    这些线程一直在连接本机C/C++应用程序(1),并导致一些副作用,例如COM初始化问题

    下面是C#组件运行时输出窗口的外观,我可以看到这些线程在运行时连接到C++/CLI DLL(3)入口点

    我的问题是:如何从C/C++应用程序中为这些C#线程设置防火墙?我不希望这些线程能够继续调用加载它的本机代码的入口点


    到目前为止,我们所能想到的最好的解决办法是在各自独立的Win32线程中运行调用C++/CLI/C#DLL(3和4)的所有代码(这两个线程都可以运行),但我希望您能提供其他建议

    这是完全正常的。每当线程开始运行时,就会调用。不管是谁发起了线程,由本机代码和托管代码启动的线程都会发生这种情况。当线程开始运行时,您将收到
    DLL\u THREAD\u ATTACH
    通知<代码>DLL\u线程\u分离当它再次停止运行时

    这些回调的目的是帮助您设置线程本地存储。你通常会完全忽略它们。您可以要求Windows不要为此烦恼,调用DLL\u进程\u附加通知处理程序


    这纯粹是一种优化,而不是一种bug解决方法。这些回调不会导致COM问题,我怀疑您是否真正发现了问题的根源。除非您的DllMain()函数忽略了
    fdreason
    参数,否则这是不好的。

    这是完全正常的。每当线程开始运行时,就会调用。不管是谁发起了线程,由本机代码和托管代码启动的线程都会发生这种情况。当线程开始运行时,您将收到
    DLL\u THREAD\u ATTACH
    通知<代码>DLL\u线程\u分离当它再次停止运行时

    这些回调的目的是帮助您设置线程本地存储。你通常会完全忽略它们。您可以要求Windows不要为此烦恼,调用DLL\u进程\u附加通知处理程序


    这纯粹是一种优化,而不是一种bug解决方法。这些回调不会导致COM问题,我怀疑您是否真正发现了问题的根源。除非您的DllMain()函数忽略了
    fdreason
    参数,否则这将是很糟糕的;你能试着总结一下吗?不确定这是否相关,但“我很难理解这个问题;你能试着总结一下吗?不确定这是否相关,但可以用“”。