C# 托管环境中的多线程pinvoke DLL。可能吗?

C# 托管环境中的多线程pinvoke DLL。可能吗?,c#,asp.net,pinvoke,C#,Asp.net,Pinvoke,我有一个Vendor.DLL(原生DLL,用C++编写),它公开了许多方法。通常,Vendor.DLL打开供应商专有文件,返回句柄,并允许对这些文件执行更多读/写操作。Vendor.DLL支持多线程(从非托管代码/COM调用时) 如果我从供应商DLL公开Pinvoke方法,比如 PinvokedVendor.DLL [System.Runtime.InteropServices.DllImportAttribute("Vendor.dll", EntryPoint = "SomeVendorMe

我有一个Vendor.DLL(原生DLL,用C++编写),它公开了许多方法。通常,Vendor.DLL打开供应商专有文件,返回句柄,并允许对这些文件执行更多读/写操作。Vendor.DLL支持多线程(从非托管代码/COM调用时)

如果我从供应商DLL公开Pinvoke方法,比如

PinvokedVendor.DLL

[System.Runtime.InteropServices.DllImportAttribute("Vendor.dll", EntryPoint = "SomeVendorMethod")]
            public static extern int SomeVendorMethod(uint param1, ref SomeVendorDataStruct pData);
如何确保这个包装类是线程安全的?当从ASP.NET调用时,它甚至是线程安全的吗?我有什么选择


提前谢谢

A call it A call it A call。线程安全性源于供应商DLL及其接口规范的实现。P-Invoke与此无关。

从vendor.dll的角度来看,PInvoke调用看起来与普通本机方法调用没有什么不同。它不应该对代码的线程安全性产生任何影响。考虑到PInvoke调用都是静态的,可以从代码中的多个线程调用它们。当然,假设您以vendor.dll规定的安全方式使用生成的数据,那么使代码[MTAThread]而不是[STAThread]在与COM相关的使用pinvoke和线程的方法中有用吗?只是一个想法

希望这有帮助, 顺致敬意,
汤姆。

我记得读过一些关于这个的东西,