【发布时间】:2014-05-09 12:41:54
【问题描述】:
public struct LocalTLS : IDisposable
{
public byte[] bArr;
public string str;
public LocalTLS(int k)
{
str = "Labamba";
bArr = new byte[20000];
}
public void Dispose()
{
MessageBox.Show("In Dispose");
//Thread.FreeNamedDataSlot("jaja");
int k = 90;
k += 90;
}
}
private void buttonTLS_retreive_Click(object sender, EventArgs e)
{
LocalTLS lts = new LocalTLS(1);
}
点击事件返回后,我期待 Dispose 调用,但永远不会发生,有人可以解释一下。我不想执行任何手动步骤,例如调用 Dispose 或使用。我希望它自动发生。
感谢您的所有回答,我想为 LocalDataStoreSlot 实现一个类,它将自动释放 Slot 并超出范围,如注释代码所示。这将使开发人员无需记住 调用 dispose,其中实际的 FreeNamedDataSlot(...) 发生。好像是不可能的
【问题讨论】:
-
这是我唯一的后续问题:你知道何时以及如何使用
IDisposable吗? Here's a link, just in case -
您能解释一下为什么您希望在事件返回后调用 Dispose 方法吗?
-
我希望 Dispose 调用,但永远不会发生 - 预期的行为,您的期望完全错误。 =D
-
Dispose() 在 lts 超出范围时不会自动调用。手动调用它或将其包装在“使用”块中。
标签: c# collections garbage