微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 在析构函数中执行新进程

@H_404_0@
@H_404_0@
我有一个负责错误处理的课程.如果调用析构函数,我想执行一个进程.但遗憾的是,这个过程不会开始.新进程使用一些参数调用exe,它应该发送一封电子邮件.
为什么这不起作用?

~ErrorH()
{
    if ((int)e > 0)
        SendErrorMail();
}

private void SendErrorMail()
{
    if (File.Exists("C:\\Program Files (x86)\\MailSend\\MailSend.exe"))
    {
        processstartinfo mailsend = new processstartinfo();
        mailsend.FileName = "C:\\Program Files (x86)\\MailSend\\MailSend.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隐式调用它.

@H_404_0@

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐