Mutex.TryOpenExisting 方法

定义

打开指定的已命名的互斥体(如果已经存在),并返回指示操作是否成功的值。

重载

TryOpenExisting(String, Mutex)

打开指定的已命名的互斥体(如果已经存在),并返回指示操作是否成功的值。

TryOpenExisting(String, MutexRights, Mutex)

利用所需的安全访问权限,打开指定的已命名的互斥体(如果已经存在),并返回指示操作是否成功的值。

TryOpenExisting(String, Mutex)

Source:
Mutex.cs
Source:
Mutex.cs
Source:
Mutex.cs

打开指定的已命名的互斥体(如果已经存在),并返回指示操作是否成功的值。

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

参数

name
String

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

result
Mutex

当此方法返回时,如果调用成功,则包含表示命名互斥体的 Mutex 对象;否则为 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 则返回 。

若要在系统互斥体不存在时创建它,请使用具有 参数的构造函数之 Mutexname

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

对此方法使用相同值的 name 多次调用不一定返回相同的 Mutex 对象,即使返回的对象表示相同的命名系统互斥体。

此方法重载等效于调用 TryOpenExisting(String, MutexRights, Mutex) 方法重载,并使用按位 OR 运算来指定 MutexRights.SynchronizeMutexRights.Modify 权限。 指定 MutexRights.Synchronize 标志允许线程等待互斥,而指定 MutexRights.Modify 标志允许线程调用 ReleaseMutex 方法。

此方法不请求互斥体的所有权。

适用于

TryOpenExisting(String, MutexRights, Mutex)

利用所需的安全访问权限,打开指定的已命名的互斥体(如果已经存在),并返回指示操作是否成功的值。

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

参数

name
String

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

rights
MutexRights

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

result
Mutex

当此方法返回时,如果调用成功,则包含表示命名互斥体的 Mutex 对象;否则为 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 则返回 。

若要在系统互斥体不存在时创建它,请使用具有 参数的构造函数之 Mutexname

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

参数 rights 必须包含 MutexRights.Synchronize 标志以允许线程等待互斥体,以及 MutexRights.Modify 允许线程调用 方法的 ReleaseMutex 标志。

对此方法使用相同值的 name 多次调用不一定返回相同的 Mutex 对象,即使返回的对象表示相同的命名系统互斥体。

此方法不请求互斥体的所有权。

适用于