COM exe'yi işlem dışı bırakan bir sınıfa sahibim. sınıfC# süreç yönetimi öldürülürken yönetilmeyen kaynakları temizleme
public class MyComObject:IDisposable
{
private bool disposed = false;
MyMath test;
public MyComObject()
{
test = new MyMath();
}
~MyComObject()
{
Dispose(false);
}
public double GetRandomID()
{
if (test != null)
return test.RandomID();
else
return -1;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (test != null)
{
Marshal.ReleaseComObject(test);
test = null;
}
disposed = true;
}
}
ve şimdi
static void Main(string[] args)
{
MyComObject test = new MyComObject();
MyComObject test2 = new MyComObject();
//Do stuff
test.Dispose();
test2.Dispose();
Console.ReadLine();
}
aşağıdaki programı normalde yürütüldüğünde, bu benim COM nesnesi temizler gibi diyoruz. Ancak, programı yürütmenin ortasında kapatırsam, çerçeve hiç yönetilmeyen nesneyi kaldıran kodu çağırmaz. Hangisi yeterince adil. Ancak, programın öldürülmesine rağmen kendini temizlemeye zorlamanın bir yolu var mı?
DÜZENLEME: esasen giriş finally
blok koyar
using (MyComObject test = new MyComObject())
using (MyComObject test2 = new MyComObject())
{
//Do stuff
}
: o taskmanager :(
. İşlemi, komut satırının ortasında öldürürsem, COM sunucuları canlı kalır. – Steve
Süreci nasıl öldürüyorsun? Neler olup bittiğini görmek için bertaraf bloklarınıza herhangi bir giriş yaptınız mı? –
(Programın normal kapatma ile kapatılması iyi olmalıdır. Görev Yöneticisi'nden sonlandırılması büyük olasılıkla daha büyük olabilir.) Programı "normal" bir şekilde kapatırsanız COM sunucusu düzgün bir şekilde kapanıyor mu? –