Semaphore.TryOpenExisting 方法

定义

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

重载

TryOpenExisting(String, Semaphore)

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

TryOpenExisting(String, SemaphoreRights, Semaphore)

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

TryOpenExisting(String, Semaphore)

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

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

要与其他进程共享的同步对象的名称。 该名称区分大小写。

result
Semaphore

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

返回

Boolean

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

属性

例外

name 是一个空字符串。

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

name 上声明的默认值为 null

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

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

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

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

注解

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

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

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

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

此方法重载等效于使用按位 OR 操作调用 TryOpenExisting 方法重载和指定 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

要与其他进程共享的同步对象的名称。 该名称区分大小写。

rights
SemaphoreRights

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

result
Semaphore

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

返回

Boolean

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

例外

name 是一个空字符串。

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

name 上声明的默认值为 null

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

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

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

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

注解

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

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

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

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

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

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

适用于