如何在C#中使用win32 API

时间:2013-02-25 21:35:22

标签: c# multithreading winapi mutex semaphore

如何将 win32 连接到 C#并使用win32函数创建信号量,互斥锁等。

2 个答案:

答案 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#提供了自己的方法来执行此类操作,您不必混合使用win32C#,因为.net的目的是从win32接管。

以下是C#使用的一些示例:
.net mutex
.net semiphores

如果您仍希望使用.netwin32,则必须在启用C++的情况下使用CLI