Как я могу спать в течение времени l oop? - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь отправлять электронную почту каждые 30 минут. через некоторое время l oop.

while (true)
{
    System.Threading.Thread.Sleep(1);
    ReadInput();
    Application.DoEvents();

    MailMessage mail = new MailMessage();
    SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
    System.Threading.Thread.Sleep(2000);
    mail.From = new MailAddress("");
    mail.To.Add("");
    mail.Subject = "Test Mail";
    mail.Attachments.Add(new System.Net.Mail.Attachment("C://Users//matte//test.txt"));
    mail.Body = "This is for testing SMTP mail from GMAIL";

    SmtpServer.Port = 587;
    SmtpServer.Credentials = new System.Net.NetworkCredential("", "");
    SmtpServer.EnableSsl = true;
    SmtpServer.Send(mail);
    System.Threading.Thread.Sleep(10000);
}

Я попытался успокоиться, но электронная почта продолжает отправляться без сна. Как мне это сделать. Чтобы письмо отправлялось каждые 30 минут?

1 Ответ

2 голосов
/ 18 апреля 2020

Функция сна получает количество времени в миллисекундах, поэтому сейчас она ждет.

public static void Sleep (int millisecondsTimeout);

В любом случае, сон - не лучший вариант, который вы можете использовать, потому что он блокирует запущенный процесс. Я бы использовал datetime при отправке электронного письма и сравнил бы System.DateTime.Now с этим значением, чтобы программа продолжала отвечать, и вы можете подождать, просто проверяя, достаточно ли разницы между двумя datetime.

DateTime LastSend = System.DateTime.Now;

while (true)
{
    if (LastSend.AddMinutes(30) > System.DateTime.Now)
        continue;
    ... your process ...
    LastSend = System.DateTime.Now;
}

Надеюсь помогает!

...