SafeHandle.ReleaseHandle Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Türetilmiş bir sınıfta geçersiz kılındığında, tanıtıcıyı serbest bırakabilmek için gereken kodu yürütür.
protected:
abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean
Döndürülenler
true
tanıtıcı başarıyla serbest bırakılırsa; aksi takdirde, yıkıcı bir hata durumunda , false
. Bu durumda bir releaseHandleFailed Yönetilen Hata Ayıklama Yardımcısı oluşturur.
Örnekler
Aşağıdaki kod örneği tanıtıcıyı serbest bırakır ve sınıfı için SafeHandle sağlanan daha büyük bir örneğin parçasıdır.
[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)]
override protected bool ReleaseHandle()
{
// Here, we must obey all rules for constrained execution regions.
return NativeMethods.CloseHandle(handle);
// If ReleaseHandle failed, it can be reported via the
// "releaseHandleFailed" managed debugging assistant (MDA). This
// MDA is disabled by default, but can be enabled in a debugger
// or during testing to diagnose handle corruption problems.
// We do not throw an exception because most code could not recover
// from the problem.
}
Açıklamalar
ReleaseHandle yönteminin yalnızca bir kez ve yalnızca tanıtıcı özelliği tarafından IsInvalid tanımlandığı şekilde geçerliyse çağrılacağı garanti edilir. Bu yöntemi türetilmiş sınıflarınızda SafeHandle uygulayarak tanıtıcıyı boşaltmak için gereken tüm kodları yürütebilirsiniz. işlevinden SafeHandle biri kaynak sızıntılarının önlenmesini garanti etmek olduğundan, uygulamanızdaki ReleaseHandle kod hiçbir zaman başarısız olmamalıdır. Aynı anda toplanan nesneler için normal sonlandırıcılar çalıştırıldıktan sonra çöp toplayıcı çağrıları ReleaseHandle . Atık toplayıcı, kaynakların bu yöntemi çağırmasını ve devam ederken yöntemin kesintiye uğramayacağını garanti eder.
Ayrıca, basit temizleme için (örneğin, bir dosya tanıtıcısında Windows API'sini CloseHandle
çağırmak) tek platform çağırma çağrısının dönüş değerini de de kontrol edebilirsiniz. Karmaşık temizleme için çok fazla program mantığınız ve bazıları başarısız olabilecek birçok yöntem çağrınız olabilir. Program mantığınızda bu servis taleplerinin her biri için geri dönüş kodu olduğundan emin olmanız gerekir.
Herhangi bir nedenle döndürürse ReleaseHandlefalse
, .NET Framework üzerinde çalışırken releaseHandleFailed Managed Debugging Assistant oluşturur. Bu, kaynakları serbest bırakma girişiminizin başarısız olduğu durumları algılamanıza yardımcı olur.