3

.NET 4.0 プロジェクトを .NET 3.5 プロジェクトに変換する必要があるという要件があります。「SmtpClient」以外はすべて問題ありません。これまでのところ、.NET 3.5 SmtpClient は IDisposable を実装していませんが、.NET 4.0 ではそれを実装していません。します!

以下は、.NET4.0 では問題なく動作しますが、.NET3.5 では動作しないコードです。

Using MailServer As New SmtpClient(MailServerName)
MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
SendMail(MailServer, msgBody, msgSubject, FromEmail, ToEmail)
End Using

.NET 3.5を使用してそれを行う方法についてのアイデア(古いスタイルの手動破棄ではなく、「使用」コードブロックを使用してオブジェクトを自動破棄することを好みます)

4

3 に答える 3

6

の前にTryCastどうですか:IDisposableUsing

Dim MailServer As New SmtpClient(MailServerName)
Using TryCast(MailServer, IDisposable)
    MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName, MailServerPassword)
    SendMail(MailServer, msgBody, msgSubject, FromEmail, ToEmail)
End Using

.NET 4.0で実行している場合、IDisposableを実装TryCast()しているため、を返します。SmtpClient

.NET 3.5で実行している場合、TryCast()戻り値NothingUsingは無視されます。

.NET 3.5では、私が知る限りSmtpClient、または他のクリーンアップ方法を提供していなかったため、クリーンアップは必要ないようです。Dispose()

于 2013-01-25T15:33:34.647 に答える
2

Using ステートメントに相当するものを明示的に記述する必要があります。このような:

    Dim MailServer As New SmtpClient(MailServerName)
    Try
        '' etc..
    Finally
        Dim disp = TryCast(MailServer, IDisposable)
        If disp IsNot Nothing Then disp.Dispose()
    End Try
于 2013-01-25T15:08:16.553 に答える
2

以下は私のために働いた(.NET 3.5で):

Dim MailServer = New SmtpClient(MailServerName)
Using TryCast(MailServer, IDisposable)
    MailServer.Credentials = New System.Net.NetworkCredential(MailServerUserName,MailServerPassword)
    SendMail(MonthlyMailServer, msgBody, msgSubject, FromEmail, ToEmail)
End Using
于 2013-01-25T15:46:23.520 に答える