0

私はこのコードを持っています:

For i = 0 To DataGridView1.RowCount - 2
    If send_email(body, DataGridView1.Rows(i).Cells(8).Value.ToString) Then
        countSentMail = countSentMail + 1
        System.Threading.Thread.Sleep(2 * 1000)
        ProgressBar1.PerformStep()
    End If
Next i

Private Function send_email(ByVal body As String, ByVal emailAddress As String) As Boolean
    Try
        Dim SmtpServer As New SmtpClient()
        Dim mail As New MailMessage()
        SmtpServer.Port = [port]
        SmtpServer.Host = [ip]
        mail = New MailMessage()
        mail.From = New MailAddress([email_from])
        mail.To.Add([email_to])
        mail.Bcc.Add([email_bbc])
        mail.Subject = [subject]
        mail.Body = body
        Mail.IsBodyHtml = True
        SmtpServer.Send(mail)
        send_email = True
    Catch ex As Exception
        send_email = False
    End Try
End Function

コードが実行されると、フォーム/アプリケーションが「応答しない」状態になり、すべての電子メールが送信され、進行状況バーが役に立たなくなります。送信機能の内容をコメントアウトすると、進行状況バーが期待どおりに機能します。助言がありますか?

4

1 に答える 1

1

返信が遅くなり申し訳ありません。

はい。send_email増加する前に呼び出していますProgressBar1

send_emailwhich は同期を使用SmtpClient.Send()し、サーバーの応答を待ちます。

代わりに使用できますSmtpClient.SendAsync()。これは実行を継続し、バックグラウンドでサーバーの応答を待ちます。

于 2013-12-19T10:55:19.560 に答える