如何将 win32 连接到 C#并使用win32函数创建信号量,互斥锁等。
答案 0 :(得分:11)
您不需要使用Win32 API来使用互斥锁或信号量。他们已经为此内置了.NET类,从那时起Mutex版本为1.1,Semaphore版本为2.0:
一些.NET内部显示Mutex类实际使用Win32 API:正如一个快速示例,下面的代码是.NET中Threading.Mutex类的OpenMutex和ReleaseMutex方法的反编译源。它使用DllImport属性和extern关键字来访问kernel32.dll中的函数
[DllImport("kernel32.dll", CharSet=CharSet.Auto, SetLastError=true)]
internal static extern SafeWaitHandle OpenMutex(int desiredAccess, bool inheritHandle, string name);
[DllImport("kernel32.dll", CharSet=CharSet.None)]
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
internal static extern bool ReleaseMutex(SafeWaitHandle handle);
我可以使用这些片段进行您的探索,而且这个方便的网站上提供了更多信息:http://www.pinvoke.net/index.aspx
答案 1 :(得分:3)
C#
提供了自己的方法来执行此类操作,您不必混合使用win32
和C#
,因为.net
的目的是从win32
接管。
以下是C#使用的一些示例:
.net mutex
.net semiphores
如果您仍希望使用.net
和win32
,则必须在启用C++
的情况下使用CLI
。