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

标签 c# process destructor

我有一个类负责错误处理。如果调用析构函数,我想执行一个进程。但遗憾的是,这个过程不会开始。新进程调用带有一些参数的 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]))
{
...
}

ErrorH继承自Parameter

问候

最佳答案

与其使用无法保证在当前时间调用的析构函数,不如使用接口(interface) System.IDisposable

通常,在 C#(例如 C++)中使用析构函数是一种不好的做法。由于我们无法确定对象将被垃圾收集器 (GC) 销毁的具体时间,因此 C# 提供了 IDisposable,它具有一个方法 Dispose,您可以显式调用它当您完成使用该对象时,或通过 using block 隐式地使用。

关于c# - 在析构函数中执行新进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306357/

相关文章:

c# - ProgressBar 绘制方法?

c# - 这种类型推断的优势是什么?

java - 理解一些 Java 代码 - 我需要一些解释

linux - 如何从进程核心文件中检索内存内容?

c++ - 具有默认保护析构函数的类不是平凡可破坏的,但派生类是?

ruby 相当于析构函数

c# - 将数据库中的数据绘制图表并合并具有相同值的行

c# - 如何循环 SQL 参数列表和 WHERE 子句?或者更有效地获得结果?

powershell - 在 PowerShell 中使用 Plink 创建进程并向其发送命令

javascript - JS字符串解构: rest parameter returning inconsistent data