Semaphore.TryOpenExisting 方法

定义

打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。

重载

TryOpenExisting(String, Semaphore)

打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。

TryOpenExisting(String, SemaphoreRights, Semaphore)

用安全访问权限打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。

TryOpenExisting(String, Semaphore)

Source:
Semaphore.cs
Source:
Semaphore.cs
Source:
Semaphore.cs

打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。

public:
 static bool TryOpenExisting(System::String ^ name, [Runtime::InteropServices::Out] System::Threading::Semaphore ^ % result);
public static bool TryOpenExisting (string name, out System.Threading.Semaphore result);
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
public static bool TryOpenExisting (string name, out System.Threading.Semaphore? result);
public static bool TryOpenExisting (string name, out System.Threading.Semaphore? result);
static member TryOpenExisting : string * Semaphore -> bool
[<System.Runtime.Versioning.SupportedOSPlatform("windows")>]
static member TryOpenExisting : string * Semaphore -> bool
Public Shared Function TryOpenExisting (name As String, ByRef result As Semaphore) As Boolean

参数

name
String

要与其他进程共享的同步对象的名称。 该名称区分大小写。 反斜杠字符 (\) 是保留的,只能用于指定命名空间。 有关命名空间的详细信息,请参阅备注部分。 根据操作系统,名称可能会有进一步的限制。 例如,在基于 Unix 的操作系统上,排除命名空间后的名称必须是有效的文件名。

result
Semaphore

当此方法返回时,如果调用成功,则包含表示命名信号的 Semaphore 对象;否则为 null 。 该参数未经初始化即被处理。

返回

如果命名信号量成功打开,则为 true;否则为 false。 在某些情况下,对于无效名称,可能会返回 false

属性

例外

name 是一个空字符串。

仅限 .NET Framework:name 的长度超过 MAX_PATH(260 个字符)。

name 上声明的默认值为 null

name 无效。 导致这种情况的原因有很多,包括操作系统可能会施加的一些限制,例如未知前缀或无效字符。 请注意,名称和通用前缀“Global\”和“Local\”区分大小写。 对于某些无效名称,该方法可能返回 false

还有一些其他错误。 HResult 属性可能提供更多信息。

name 太长。 长度限制可能取决于操作系统或配置。

存在该命名信号量,但用户没有使用它时所需的安全访问权限。

注解

name可以使用 或 Local\ 作为Global\前缀,以指定命名空间。 Global指定命名空间后,可以与系统上的任何进程共享同步对象。 Local指定命名空间时(未指定命名空间时也是默认值),可以与同一会话中的进程共享同步对象。 在 Windows 上,会话是登录会话,服务通常在不同的非交互式会话中运行。 在类似于 Unix 的操作系统上,每个 shell 都有其自己的会话。 会话本地同步对象可能适合用于使用父/子关系(在这些进程都在同一会话中运行)之间进行同步。 有关 Windows 上的同步对象名称的详细信息,请参阅 对象名称

如果命名空间中存在所请求类型的同步对象,则会打开现有的同步对象。 如果命名空间中不存在同步对象,或者命名空间中存在不同类型的同步对象, false 则返回 。

若要在系统信号灯尚不存在时创建信号量,请使用具有 参数的 Semaphore 构造函数之一 name

如果不确定命名信号灯是否存在,请使用此方法重载而不是 OpenExisting(String) 方法重载,如果信号灯不存在,该方法将引发异常。

此方法重载等效于调用 TryOpenExisting 方法重载,并使用按位 OR 操作来指定 SemaphoreRights.SynchronizeSemaphoreRights.Modify 权限。 指定 SemaphoreRights.Synchronize 标志允许线程进入信号灯,而指定 SemaphoreRights.Modify 标志允许线程调用 Release 方法。

适用于

TryOpenExisting(String, SemaphoreRights, Semaphore)

用安全访问权限打开指定名称为信号量(如果已经存在),并返回指示操作是否成功的值。

public:
 static bool TryOpenExisting(System::String ^ name, System::Security::AccessControl::SemaphoreRights rights, [Runtime::InteropServices::Out] System::Threading::Semaphore ^ % result);
public static bool TryOpenExisting (string name, System.Security.AccessControl.SemaphoreRights rights, out System.Threading.Semaphore result);
static member TryOpenExisting : string * System.Security.AccessControl.SemaphoreRights * Semaphore -> bool
Public Shared Function TryOpenExisting (name As String, rights As SemaphoreRights, ByRef result As Semaphore) As Boolean

参数

name
String

要与其他进程共享的同步对象的名称。 该名称区分大小写。 反斜杠字符 (\) 是保留的,只能用于指定命名空间。 有关命名空间的详细信息,请参阅备注部分。 根据操作系统,名称可能会有进一步的限制。 例如,在基于 Unix 的操作系统上,排除命名空间后的名称必须是有效的文件名。

rights
SemaphoreRights

表示所需的安全访问权限的枚举值的按位组合。

result
Semaphore

当此方法返回时,如果调用成功,则包含表示命名信号的 Semaphore 对象;否则为 null 。 该参数未经初始化即被处理。

返回

如果命名信号量成功打开,则为 true;否则为 false。 在某些情况下,对于无效名称,可能会返回 false

例外

name 是一个空字符串。

仅限 .NET Framework:name 的长度超过 MAX_PATH(260 个字符)。

name 上声明的默认值为 null

name 无效。 导致这种情况的原因有很多,包括操作系统可能会施加的一些限制,例如未知前缀或无效字符。 请注意,名称和通用前缀“Global\”和“Local\”区分大小写。 对于某些无效名称,该方法可能返回 false

还有一些其他错误。 HResult 属性可能提供更多信息。

name 太长。 长度限制可能取决于操作系统或配置。

存在该命名信号量,但用户没有使用它时所需的安全访问权限。

注解

name可以使用 或 Local\ 作为Global\前缀,以指定命名空间。 Global指定命名空间后,可以与系统上的任何进程共享同步对象。 Local指定命名空间时(未指定命名空间时也是默认值),可以与同一会话中的进程共享同步对象。 在 Windows 上,会话是登录会话,服务通常在不同的非交互式会话中运行。 在类似于 Unix 的操作系统上,每个 shell 都有其自己的会话。 会话本地同步对象可能适合用于使用父/子关系(在这些进程都在同一会话中运行)之间进行同步。 有关 Windows 上的同步对象名称的详细信息,请参阅 对象名称

如果命名空间中存在所请求类型的同步对象,则会打开现有的同步对象。 如果命名空间中不存在同步对象,或者命名空间中存在不同类型的同步对象, false 则返回 。

若要在系统信号灯尚不存在时创建信号量,请使用具有 参数的 Semaphore 构造函数之一 name

如果不确定命名信号灯是否存在,请使用此方法重载而不是 OpenExisting(String, SemaphoreRights) 方法重载,如果信号灯不存在,该方法将引发异常。

参数 rights 必须包含 SemaphoreRights.Synchronize 允许线程进入信号灯的标志,以及 SemaphoreRights.Modify 允许线程调用 方法的 Release 标志。

对此方法使用相同值的 name 多次调用不一定返回相同的 Semaphore 对象,即使返回的对象表示相同的命名系统信号量。

适用于