gpt4 book ai didi

c# - 在 Dispose 方法中取消 dispose

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:54 30 4
gpt4 key购买 nike

有没有一种方法可以从 Dispose 方法中取消处置,换句话说,在调用 A.Dispose() 时不处置 A。

更新我没有很好地解释,因为我想不出一个很好的方式来表达它。我拥有的是一个在单独线程中运行的弹出窗口中显示进度条(选取框)的类。创建进度弹出窗口时,会返回一个类似于 Controller 的一次性对象,因此我们可以这样做:

using (var progress = Dialogs.ShowProgress("Please wait..."))
{
// do lots of stuff here
progress.UpdateStatus("Please wait some more...");
// do more stuff
}

当 using block 退出时,进度窗口将关闭并销毁。

现在我有这样的情况,在此 block 中发生的事情也会创建一个进度窗口,而不是返回一个新对象并创建一个新窗口,我想返回第一个实例创建的对象,并且只在一审处置。

更新好的,我所做的是为每个 Dialogs.ShowProgress() 调用创建一个新的 IDisposable 对象,并将原始 Controller 对象附加到它。这些对象在完成时会被释放,而 Controller 只有在它是唯一要释放的对象时才会被释放。

最佳答案

正如其他人所说,以可能不会真正释放的方式实现 IDisposable 是个坏主意。这是实现您要执行的操作的另一种方法:

interface IMaybeDisposable
{
bool TryDispose(); //return false if dispose was canceled
}

你可以像这样使用它:

IMaybeDisposable maybe = //something
try
{
// do something with maybe
}
finally
{
if (maybe.TryDispose())
// yay, it disposed!
else
// hm, it didn't dispose; do something else
}

关于c# - 在 Dispose 方法中取消 dispose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15532808/

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