erhalten wurden Ich schreibe ein AutoCAD-Plugin. Ich benutze eine Transaktion, um einige Objekte zu bekommen, und ich habe eine Frage gestellt - muss ich Objekte (die ich über die Transaktion erhalten habe) schließen?Schließen AutoCAD-Objekte, die über die Transaktion
Es ist in der Dokumentation geschrieben, dass, wenn die Commit() - Methode Transaktion aufgerufen wird, jedes Objekt schließt, das über die Transaktion empfangen wurde.
Leere Commit() - Diese Funktion verpflichtet die vorgenommenen Änderungen in allen DBObjects während der Transaktion geöffnet, und dann schließt sie.
Aber was passiert, wenn ich diese Methode nicht nenne? Zum Beispiel verwende ich die Transaktion nur, um ein Objekt zu öffnen und seinen Ebenennamen zu erhalten. So etwas wie das Folgende:
Wie Sie sehen können, ich hier nicht Commit() aufrufen. Was wird in diesem Fall passieren? Wird die Entität geschlossen oder nicht (wie die Transaktion es verwendet, muss sie entsorgt werden, also nehme ich an, dass sie alle Objekte schließen muss. Aber ich habe keine Bestätigung in der Dokumentation gefunden, so dass es nur meine Annahme ist).
Vielleicht brauche ich, wie dies zu tun:
ObjectId objectId = new ObjectId();
string layer = string.Empty;
Database hostapp_workdb = HostApplicationServices.WorkingDatabase;
using (Application.DocumentManager.MdiActiveDocument.LockDocument())
using (Transaction transaction = hostapp_workdb.TransactionManager.StartTransaction())
{
using (Entity entity = transaction.GetObject(objectId, OpenMode.ForRead) as Entity)
{
if (entity != null)
layer = entity.Layer;
}
}
Links zu offiziellen Quellen gefördert werden.
Vielen Dank.
Normalerweise müssen Sie nicht jede Entität entsorgen. Wenn "entity" im zweiten Fall "null" ist, erhalten Sie "Exception", wenn "entity.Dispose" aufgerufen wird. –
@SarveshMishra nein, werde ich nicht. Ich habe diesen Code ausgeführt und selbst wenn die Entity null ist - ich werde keine Ausnahme bekommen. –