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);
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框架:name的长度超过MAX_PATH(260 个字符)。

namenull

name 无效。 这可能是出于各种原因,包括操作系统可能放置的一些限制,例如未知前缀或无效字符。 请注意,名称和通用前缀“Global\”和“Local\”区分大小写。 对于某些无效的名称,该方法可能会改为返回 false

-或-

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

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

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

注解

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

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

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

如果不确定命名信号量是否存在,请使用此方法重载而不是 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

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

rights
SemaphoreRights

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

result
Semaphore

此方法返回时,包含一个 Semaphore 对象,该对象表示调用成功或 null 调用失败时的命名信号灯。 此参数被视为未初始化。

返回

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

例外

name 是空字符串。

-或-

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

namenull

name 无效。 这可能是出于各种原因,包括操作系统可能放置的一些限制,例如未知前缀或无效字符。 请注意,名称和通用前缀“Global\”和“Local\”区分大小写。 对于某些无效的名称,该方法可能会改为返回 false

-或-

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

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

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

注解

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

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

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

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

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

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

适用于