Tôi có một lớp khởi tạo quá trình thoát COM. Lớp làC# dọn dẹp tài nguyên không được quản lý khi quá trình bị giết
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;
}
}
và tôi gọi nó là như sau
static void Main(string[] args)
{
MyComObject test = new MyComObject();
MyComObject test2 = new MyComObject();
//Do stuff
test.Dispose();
test2.Dispose();
Console.ReadLine();
}
bây giờ, đây dọn dẹp đối tượng COM của tôi khi chương trình thực hiện bình thường. Tuy nhiên, nếu tôi đóng chương trình ở giữa quá trình thực thi, khung công tác sẽ không bao giờ gọi mã giải phóng đối tượng không được quản lý của tôi. Đó là đủ công bằng. Tuy nhiên, có cách nào để buộc chương trình tự dọn dẹp mặc dù nó đã bị giết không?
EDIT: nó không giống hứa hẹn từ một kill cứng từ Taskmanager :(
cũng không hoạt động. Các máy chủ COM vẫn còn sống nếu tôi giết quá trình ở giữa khối sử dụng. – Steve
Làm thế nào để bạn giết chết quá trình? Bạn đã đặt bất kỳ đăng nhập vào các khối vứt bỏ của bạn để xem những gì đang xảy ra? –
(Chỉ cần đóng chương trình với một tắt máy bình thường sẽ được sử dụng tốt. Chấm dứt nó từ Task Manager có thể là nastier.) Máy chủ COM tắt đúng cách nếu bạn đóng chương trình theo cách "bình thường"? –