使用C#.NET 4.0Dispose()是否曾创建对象的新实例?
我公司的应用程序使用资源锁定器来防止记录被同时编辑。我们使用数据库来存储锁的开始时间以及获取锁的用户。这导致了下面的(奇怪?)落实处置上的资源锁,这恰好是从析构函数叫做:
protected virtual void Dispose(bool disposing)
{
lock (this)
{
if (lockid.HasValue)
{
this.RefreshDataButtonAction = null;
this.ReadOnlyButtonAction = null;
try
{
**Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("@lockID", lockid.Value);
parameters.Add("@readsToDelete", null);
Object returnObject = dbio2.ExecuteScalar("usp_DeleteResourceLockReads", parameters);**
lockid = null;
}
catch (Exception ex)
{
Logger.WriteError("ResourceLockingController", "DeleteResourceLocks", ex);
}
finally
{
((IDisposable)_staleResourcesForm).Dispose();
_staleResourcesForm = null;
}
}
}
}
我关注的粗体部分,我们因为已经记录陌生的“手柄是未初始化“来自数据库调用的异常。我在其他地方读到,在Finalize()期间创建新对象是不安全的,但是同样的规则适用于dispose()吗?在Dispose()期间创建新对象时是否有任何可能的副作用?
你从哪里读过,在终结器中创建新对象不安全? –
这将是非常酷,如果所以让我们大胆的线我们有问题 – Jonesopolis
你已经在那个时间点处理dbio2吗?这可能是它不工作的原因。 – Servy