如果我在整个应用程序运行过程中都需要一次性物品怎么办?在某些情况下,这似乎是必要的,例如,如果我想将 2 个线程同步到:System.Collections.Concurrent.BlockingCollection。
如果一个线程使用 Using 并处理它,而另一个线程无法关闭或正在等待 BlockingCollection(您可以设置超时),那么它将得到一个处理异常。
并且可能有更多情况下这是真的,所以有没有办法绕过这个,或者我应该简单地在初始化时创建对象,然后在关闭时处理它?
编辑:这是我使用一次性物品时 Visual Studio 告诉我的内容。
首先我如何使用它,在一个例子中:
private void Initialize()
{
Queue = new System.Collections.Concurrent.BlockingCollection<byte[]>();
Queue.Dispose();
}
我明白了:
warning : CA2213 : Microsoft.Usage : 'Capture' contains field 'Capture.Queue' that is of IDisposable type: 'BlockingCollection<byte[]>'. Change the Dispose method on 'Capture' to call Dispose or Close on this field.
所以这让我很困惑。我已经告诉它在它制成后立即处理它,它仍然希望我处理它:S
编辑2:
这是处理应该在整个应用程序运行时还活着的对象的正确方法吗?
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
Queue.Dispose();
}
base.Dispose(disposing);
}
如您所见,我在那里添加了队列。
但这似乎不对,使用 Designer.cs 文件并在 components.Dispose() 下添加东西感觉很奇怪;
但希望它是正确的。