我正在将C#.NET Framework项目转换为.NET Core。它可以编译,没有错误或警告,并且可以在Windows上正常运行,但是当我在CentOS 7上尝试使用它时,当我尝试创建EventWaitHandle的实例时得到了 System.PlatformNotSupportedException 。这是代码:
this.eventHandle = new EventWaitHandle(initialState, resetMode, name);
显然,该类具有.NET Core 2.1支持,因为此处提供了MS文档:
https://docs.microsoft.com/en-us/dotnet/api/system.threading.eventwaithandle.-ctor?view=netcore-2.1
这是否像错误所描述的那样简单,并且跨多个平台不支持此类?如果是这样,为什么它包含在.NET Core中?这里还会有其他活动吗?
如果根本不支持它,是否有人可以建议在.NET Core 2.1中完全支持该类?
谢谢。
答案 0 :(得分:3)
.Net Core具有一些特定于平台的api。这就是其中之一。它是无法处理的命名句柄,请参见source
public EventWaitHandle(bool initialState, EventResetMode mode, string name)
{
if(name != null)
{
#if PLATFORM_UNIX
throw new PlatformNotSupportedException(Environment.GetResourceString("PlatformNotSupported_NamedSynchronizationPrimitives"));
#else
if (System.IO.Path.MaxPath < name.Length)
{
throw new ArgumentException(Environment.GetResourceString("Argument_WaitHandleNameTooLong", name));
}
#endif
}
...
一些更有趣的读物here:
我不确定您应该使用哪种.NET技术。如果不需要跨进程同步,则无需为EventWaitHandle指定名称,也可以使用EventWaitHandle的其他子类,例如ManualResetEvent或AutoResetEvent。