0

ループしてループごとにメールを送信する for ループがあります。現在、thread.sleep()を使用していますが、ユーザーがプログラムとやり取りできるようにしたいので、その1つのループをデラップするだけです。thread.sleep を使わずにこれを行うことは可能ですか?

4

4 に答える 4

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);
    }
}
于 2012-10-01T15:07:01.743 に答える
0

コードをバックグラウンドスレッドにシフトしてみてください。

于 2012-10-01T15:06:35.597 に答える
0

GUI をインタラクティブに保つには、メールの送信方法を別のスレッドに入れる必要があります。

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

public void SendMail() 
{
    //Send mails here       
}
于 2012-10-01T15:05:51.033 に答える
0

UI スレッドをロックしないように、新しいスレッドをスピンオフしてメールを送信できます。

于 2012-10-01T15:06:04.033 に答える