gpt4 book ai didi

c# - 如何处理 ManualResetEvent

转载 作者:太空狗 更新时间:2023-10-29 20:48:50 25 4
gpt4 key购买 nike

嗨当我使用以下代码时:

 myManualResetEvent.Dispose();

编译器报错:

 'System.Threading.WaitHandle.Dispose(bool)' is inaccessible due to its protection level.

但是以下行工作正常:

 ((IDisposable)myManualResetEvent).Dispose();

它是正确的处理方式还是在运行时它可能会在某些场景中崩溃。

谢谢。

最佳答案

.NET 基类库的设计者决定使用 explicit interface implementation 实现 Dispose 方法:

private void IDisposable.Dispose() { ... }

Dispose 方法是私有(private)的,调用它的唯一方法是将对象转换为 IDisposable,如您所见。

这样做的原因是将 Dispose 方法的名称自定义为能够更好地描述对象处置方式的名称。对于 ManualResetEvent,自定义方法是 Close 方法。

要处理 ManualResetEvent,您有两个不错的选择。使用 IDisposable:

using (var myManualResetEvent = new ManualResetEvent(false)) {
...
// IDisposable.Dispose() will be called when exiting the block.
}

或调用关闭:

var myManualResetEvent = new ManualResetEvent(false);
...
// This will dispose the object.
myManualResetEvent.Close();

您可以在 Customizing a Dispose Method Name 部分阅读更多内容在 MSDN 上的设计指南实现 Finalize 和 Dispose 以清理非托管资源中:

Occasionally a domain-specific name is more appropriate than Dispose. For example, a file encapsulation might want to use the method name Close. In this case, implement Dispose privately and create a public Close method that calls Dispose.

关于c# - 如何处理 ManualResetEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5270701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com