2016-04-06 18 views
-1

Bir düğmeyle vb.net'de ana formum var ve bu tuşa tıkladığınızda başka bir düğme içeren bir Windows İletişim Kutusu gösterilecektir. İletişim kutusundaki düğmeyi tıkladığınızda bir e-posta göndermem ve iletişim kutusunu kapatmam gerekiyor.VB.NET e-posta ile gönderme konusu için ayrı bir konu

Burada sorunu e-posta gönderme yaklaşık 5 ila 6 saniye sürer

bu. E-postayı göndermeden önce iletişim kutusunu kapatmalıyım. E-postayı bir konuya göndermeyi düşünüyorum. Bunu başarmanın en iyi yolu nedir? Örnek bir kod gönderir misiniz? İletişim kutusu kapatıldığında iş parçacığı çalışıyorsa ne olur?

Ayrıca, bunun yerine bir arka plan çalışmacısı kullanmak daha iyi olur mu? İplik geçirmenin en iyi yolu olup olmadığından emin değilim.

+0

diyoruz deneyin. Bu, yanıtlama sorununu çözer ve diyalog hemen kapanır. Ancak, aşağıdaki gibi aralıklı hatalarla karşılaşıyorum: "Karşılaşılan Hata (SendEmail): Pencere tanıtıcısı oluşturulurken hata oluştu". Bunun iş parçacığı iletişim kutusunda bildirildiğinden ve iş parçacığı tamamlanmadan önce iletişim kutusunun kapatıldığından emin değilim. –

cevap

0

bu

Public Class libMail 

    Private WithEvents bw As New BackgroundWorker 

    Public Sub BackgW() 
     bw.RunWorkerAsync() 
    End Sub 

    Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles bw.DoWork 

     SendMail("Subject", "SendingMail") 

    End Sub 

     Public Shared Function CheckForInternetConnection() As Boolean 


     Try 
      Return My.Computer.Network.Ping("www.google.com") 
     Catch 
      Return False 
     End Try 

    End Function 

    Public Function SendMail(subject As String, msg As String) As String 
     Try 

      Select Case CheckForInternetConnection() 
       Case True 

        Dim smtpServer As New SmtpClient 
        Dim eMail As New MailMessage() 
        smtpServer.UseDefaultCredentials = False 
        smtpServer.Credentials = New System.Net.NetworkCredential("YourMail", "yourPassword") 
        smtpServer.Port = 587 
        smtpServer.EnableSsl = True 
        smtpServer.Host = "smtp.gmail.com" 


        eMail = New MailMessage() 
        eMail.From = New MailAddress("yourMail") 
        eMail.To.Add("MailToSend") 
        eMail.Subject = subject 

        eMail.IsBodyHtml = False 
        eMail.Body = msg 
        smtpServer.Send(eMail) 

        Return "SENT" 
      End Select 
      Return Nothing 
     Catch ex As Exception 

      Return Nothing 
     End Try 

    End Function 

    Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles bw.RunWorkerCompleted 

      'do some work when is over 
    End Sub 

    End class 

'Ben bir iş parçacığı olarak gönderen e-posta çalıştırmak için denedim

 Using l As New libMail 
      l.BackgW() 
      'CLOSE FORM 
     End Using 
+0

Merhaba teşekkürler! Ama bu durumda, formu sadece BackgroundWorker1_RunWorkerCompleted'de kapatmak zorunda mıyım? Böyle bir şey yapmak mümkün mü? Adım 1. l.BackgW, Adım 2'yi arayın. İletişim kutusunu kapatın. –

+0

@RaymondWee evet öyle – Dejan