2014-06-10 5 views
0

나는 일종의 간단한 문제가 있습니다. 테스트 이메일을 보내는 코드 섹션이 있는데,이 프로세스가 발생하기 직전에 표시 할 선택 윤곽 진행 막대를 표시하고 싶습니다. 이 일어나고있다.VB.net에서 수면 사용

그러나 테스트 이메일을 보내야 진행률 표시 줄이 나타납니다.

잠자기 기능을 사용해 보았지만 테스트 이메일이 전송 될 때까지 진행률 막대가 표시되지 않습니다.

이유를 아는 사람이 있습니까?

코드 : (참고 : GroupBoxTesting가 진행 표시 줄을 포함) 당신은 잠을로 이동합니다 (현재 실행중인 같이 스레드가 코드입니다) UI 스레드를 말 했어요

Private Sub BTMsendmailtest_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTMsendmailtest.Click 

     GroupBoxTesting.Visible = True 

     Threading.Thread.Sleep(500) 

     Try 
      Dim Mail As New MailMessage 

      Mail.Subject = "Test email for Email Alerts!" 
      Mail.To.Add(TXTemailaddy.Text) 

      Mail.From = New MailAddress(TXTsmtpusr.Text) 
      Mail.Body = "This is a test message from Email Alerts!" & Environment.NewLine & Environment.NewLine & "If you are reading this, then Email Alerts! is properly configured." 

      Dim SMTP As New SmtpClient(TXTsmtpsvr.Text) 
      If CHKEnableSSL.Checked = True Then 
       SMTP.EnableSsl = True 
      Else 
       SMTP.EnableSsl = False 
      End If 
      SMTP.Credentials = New System.Net.NetworkCredential(TXTsmtpusr.Text, TXTsmtppwd.Text) 
      SMTP.Port = TXTsmtpport.Text 
      SMTP.Send(Mail) 
      SendingPB.Value = False 
      MessageBox.Show("A test email has been sent to " & TXTemailaddy.Text & " from " & TXTsmtpusr.Text & "." & Environment.NewLine & Environment.NewLine & "If you did not recieve an email, please check your settings and try again.", "Test Email") 
      GroupBoxTesting.Visible = False 
     Catch ex1 As Exception 
      SendingPB.Value = False 
      GroupBoxTesting.Visible = False 
      MessageBox.Show(ex1.Message) 
      Return 
     End Try 
    End Sub 

답변

1

, 그래서 잠들고 지정된 시간 동안 아무 것도하지 않습니다. Sleep이 없어도 UI 스레드가 전자 메일을 보내 너무 커서 바쁜 진행률 표시 줄을 업데이트하지 않았을 수 있습니다.

BackgroundWorker을 사용하여 이메일을 보내거나 SmtpClient.SendAsync Method을 사용할 수 있습니다. 후자에는 예제가 포함되어 있습니다. How do I send email asynchronously?에 다른 예가 있습니다.

+0

감사합니다. 제공하신 제안을 확인해 드리겠습니다. 수면이 시작되기 전에 UI가 업데이트되기를 바랬습니다. 고마워. – level42

+0

배경 작업자가 트릭을 완료 한 것 같습니다. 감사합니다! – level42

-1

2 만개 이상의 행을 처리하고 쓰는 동안 VB.Net 응용 프로그램과 함께 Excel 자동화를 사용하는 동안 오류가있었습니다. 이 코드를 사용하여 문제를 해결했습니다.

' ---- Write the Row to the Worksheet 
Threading.Thread.Sleep(1000) 
lstrStartingColRow = "A" & mlngIdx.ToString 
If .InsertArrayIntoRow(istrWorksheetName:=lstrWorksheetName, 
    istrStartingCell:=lstrStartingColRow, 
    istrArrayOfData:=mstrExcelRow) = False Then 
    Throw New Exception("Insert Error *************************") 
End If 
+0

이것이 어떻게 질문과 관련되는지 자세히 설명해 주시겠습니까? 진행률 막대 문제를 해결하는 데 도움이되는 코드 중 어느 부분을 표시 했습니까? –