gpt4 book ai didi

c# - 何时使用 Dispose 或何时使用 Using

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:59 25 4
gpt4 key购买 nike

我最近遇到了 Dispose 方法必须在 C# 程序中进行硬编码的情况。否则,电子邮件中使用的文件将被“永远”锁定,甚至 Process Manager 都无法告诉我是谁/什么锁定了它。我不得不使用 Unlocker Assistant 强制删除文件,但我担心现在我在服务器上留下了一些分配的内存块。

我指的代码是这样的:

MailMessage mail = new MailMessage();
mail.From = new MailAddress("reception@domain.com", "###");
mail.Subject = "Workplace Feedback Form";
Attachment file = new Attachment(uniqueFileName);
mail.Attachments.Add(file);
mail.IsBodyHtml = true;
mail.CC.Add("somebody@domain.com");
mail.Body = "Please open the attached Workplace Feedback form....";

//send it
SendMail(mail, fldEmail.ToString());

上面的代码使 uniqueFileName 中的文件被附件句柄锁定,我无法删除它,因为这段代码是从客户端机器(而不是服务器本身)运行的,句柄无法找到该文件。

在我强制删除文件后,我从另一个论坛上发现我应该处理附件对象。

所以我在邮件发送后添加了这几行代码......

//dispose of the attachment handle to the file for emailing, 
//otherwise it won't allow the next line to work.
file.Dispose();

mail.Dispose(); //dispose of the email object itself, but not necessary really
File.Delete(uniqueFileName); //delete the file

我是否应该将其包装在 using 语句中?

这就是我问题的症结所在。什么时候用Using,什么时候用Dispose?我希望两者之间有明确的区别,即如果您执行“X”则使用这个,否则使用那个。

When to Dispose?还有这个C# Dispose : when dispose and who dispose it确实回答了我的问题,但我仍然对何时使用这两者的“条件”感到困惑。

最佳答案

在 C# 中使用:

using(MyDisposableType obj = new MyDisposableType())
{
...
}

是等同于

的“语法糖”(或速记符号)
MyDisposableType obj = new MyDisposableType();
try {
...
} finally {
obj.Dispose();
}

http://msdn.microsoft.com/en-us//library/yh598w02.aspx 中所述

关于c# - 何时使用 Dispose 或何时使用 Using,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22702716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com