c# – 在析构函数中执行新进程
发布时间:2020-12-15 17:27:21 所属栏目:百科 来源:网络整理
导读:我有一个负责错误处理的课程.如果调用析构函数,我想执行一个进程.但遗憾的是,这个过程不会开始.新进程使用一些参数调用exe,它应该发送一封电子邮件. 为什么这不起作用? ~ErrorH(){ if ((int)e 0) SendErrorMail();}private void SendErrorMail(){ if (File.
我有一个负责错误处理的课程.如果调用析构函数,我想执行一个进程.但遗憾的是,这个过程不会开始.新进程使用一些参数调用exe,它应该发送一封电子邮件.
为什么这不起作用? ~ErrorH() { if ((int)e > 0) SendErrorMail(); } private void SendErrorMail() { if (File.Exists("C:Program Files (x86)MailSendMailSend.exe")) { ProcessStartInfo mailsend = new ProcessStartInfo(); mailsend.FileName = "C:Program Files (x86)MailSendMailSend.exe"; mailsend.Arguments = "…"; Process.Start(mailsend); } } 如果我在构造函数中执行SendErrorMail函数,一切正常.如果我查看调试器,似乎我到达了Process.Start(mailsend);命令. 编辑 好的,我现在使用了IDisposable方法.它工作正常,但确实正确使用它? class ErrorH : IDisposable { private bool disposed = false; ... public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool desposing) { if(!this.disposed) if ((int)e > 0) SendErrorMail(); disposed = true; } 在程序中我使用: using (Parameter p = new Parameter(args[0])) { ... } Parameter的继承类ErrorH. 格尔茨 解决方法
不要使用无法保证在当前时间调用的析构函数,而是使用接口System.IDisposable.
通常,在C#中使用析构函数是一种不好的做法,例如.由于我们无法确定垃圾收集器(GC)会破坏对象的具体时间,因此C#提供了具有单个方法Dispose的IDisposable,您可以在完成对象使用时显式调用它,也可以使用block隐式调用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |