2012-10-01 2 views
0

for 루프와 루프마다 전자 메일을 보내는 for 루프가 있습니다. 지금은 thread.sleep()을 사용하고 있지만 사용자가 여전히 프로그램과 상호 작용할 수 있기를 바란다. thread.sleep을 사용하지 않고이 작업을 수행 할 수 있습니까?Thread.Sleep을 사용하지 않고 전자 메일 메시지 보내기를 지연시키기 C#

+0

이동 배경 스레드에 루프 :

그것은 다음과 같이 보일 것입니다. 이메일 전송이 주/GUI 스레드에 있어야하는 경우 실제 전송을 기본 스레드로 높이고 슬리핑을 백그라운드 스레드로 이동하십시오. –

+0

루프 반복마다 이메일을 보내야합니까? 또는 루프를 완료 한 후 하나 (또는 ​​그 이상)를 보내는 것으로 충분합니까? –

+0

왜 다른 사람이 이미이 질문을하지 않았는지 모르지만 ... 왜 정확히 보내지 못하게합니까? – James

답변

0

GUI를 대화식으로 유지하려면 분리 된 스레드로 메일을 보내는 방법을 넣어야합니다.

Thread newThread = new Thread(new ThreadStart(SendMail)); 
newThread.Start(); 

public void SendMail() 
{ 
    //Send mails here  
} 
0

UI 스레드를 잠그지 않도록 새 스레드를 스핀하여 전자 메일을 보낼 수 있습니다.

0

코드를 백그라운드 스레드로 이동해보십시오.

1

UI 스레드에서 루프를 실행하고 있습니까? 그렇다면 Task.Factory.StartNew를 사용하여 루프를 다른 스레드에서 실행하십시오. 그 때 보내는 전자 메일을 지연해야하는 경우 실제로 루프를 시작하기 전에 Thread.Sleep을 넣으십시오.

private void OnButtonClick(object sender, EventArgs e) 
{ 
    //This code happens on the UI thread 
    Task.Factory.StartNew(SendEmails); 
} 

private void SendEmails() 
{ 
    Thread.Sleep(500); 

    foreach(var email in emailAddresses) { 
     SendEmail(email); 
    } 
} 
+0

흠.이 방법은 전자 메일을 보내기 위해 System 메소드를 사용하지 않으므로 작동하지 않는 것 같다. 나는 템플릿 이메일을 사용하여 Outlook을 통해 그들을 보냈습니다. – Stonep123

+0

좀 더 자세히 알려주세요. 왜 정확한 방법으로 결과가 바뀔지 모르겠다. – theMayer

관련 문제