public static class Commands
{
private static DBObject dbo;
[CommandMethod(nameof(Test))]
public static void Test()
{
var doc = Application.DocumentManager.MdiActiveDocument;
LogDisposed(dbo, "До StartTransaction", doc);
using (var t = doc.TransactionManager.StartTransaction())
{
dbo = doc.Database.BlockTableId.GetObject(OpenMode.ForRead);
LogDisposed(dbo, "До Commit", doc);
t.Commit();
LogDisposed(dbo, "После Commit", doc);
}
LogDisposed(dbo, "После Transaction.Dispose", doc);
}
[CommandMethod(nameof(TestOpen))]
public static void TestOpen()
{
var doc = Application.DocumentManager.MdiActiveDocument;
using (dbo = doc.Database.BlockTableId.Open(OpenMode.ForRead))
{
LogDisposed(dbo, "До Dispose", doc);
}
LogDisposed(dbo, "После Dispose", doc);
}
private static void LogDisposed(DBObject dbo, string msg, Document doc)
{
doc.Editor.WriteMessage($"\n{msg}: IsDisposed={dbo?.IsDisposed}");
}
}