Forum
Aşağıda ki gibi bir timerım var bu timer ile otomatik mail gönderiyorum, servisi kapatmadıktan sonra timer iptal olmuyor timerı nasıl iptal edebilirim?
public static void Main()
{
Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler( DisplayTimeEvent );
myTimer.Interval = 1000;
myTimer.Start();
}
Bir timer'ı disable etmek myTimer.Stop(); kodunu kullanmanız gerekecek. Onun yerine mevcut servisinizin içindeki timer objesi içinde gönderimi bekleyen mail var mı kontrolunu yapmanız daha doğru olur. Gönderim yapılan mailler 1 yapılmayanlar 0 olarak işaretlenebilir. Her 5 dakkada bir veritabanı check edilir, statusu 0 olan mail varsa onlara gönderim yapılır. Böylece servisinizi kapatmanız gerekmez. Çünkü kapatırsanız bir daha kendi kendine başlamaz.
İlginiz için teşekkür ederim ama benim yapmak istediğim textboxdan girilen sayı kadar timerdaki aralıklarla mail göndermek.
Aşağıdaki kod parçacığıyla timerda ki aralıklarla mail gönderebiliyorum aynı zamanda donguye sokup textden girilen kadar da mail gönderebliyorum,
ama 2 sini birleştirip, textden gelen veri kadar timer daki aralıklarla mail gönderemiyorum. İnşallah anlatabilmişimdir. Teşekkürler
timer1.Interval = 20000;
timer1.Enabled = true;
timer1.Elapsed += new ElapsedEventHandler(SaatMail);
timer1.Start();
Yapmak istediğiniz, 20 saniyede bir toplamda X tane mail göndermek doğru mu ? X sayısına ulaşınca da gönderimi sonlandırmak.
Bunun için OnElapsedTime event'i içinde gönderim yapıyorsunuz zaten. Her gönderim yaptığınızda i++ diyerek i'yi bir artırın. i değişkenini de global tanımlayın. Böylece mail gönderdikçe 1 artacaktır. Yine OnElapsedTime event'i içinde bu i değerinin textboxtaki değere eşit olduğunu kontrol edin. Eğer i, textbox'taki değere eşit olmuşsa gönderim sayısı tamamlanmış demektir. Hemen akabinde timer.Stop() kodunu yazarsınız. Böylece windows uygulaması, gönderim sayısını tamamlandığında işlemi durduracaktır.
Yapmak istediğiniz, 20 saniyede bir toplamda X tane mail göndermek doğru mu ? X sayısına ulaşınca da gönderimi sonlandırmak.
Bunun için OnElapsedTime event'i içinde gönderim yapıyorsunuz zaten. Her gönderim yaptığınızda i++ diyerek i'yi bir artırın. i değişkenini de global tanımlayın. Böylece mail gönderdikçe 1 artacaktır. Yine OnElapsedTime event'i içinde bu i değerinin textboxtaki değere eşit olduğunu kontrol edin. Eğer i, textbox'taki değere eşit olmuşsa gönderim sayısı tamamlanmış demektir. Hemen akabinde timer.Stop() kodunu yazarsınız. Böylece windows uygulaması, gönderim sayısını tamamlandığında işlemi durduracaktır.
Ferhat bey ben bu dediğiniz yöntemi birebir uyguladım ama yine aynı timer hiç durmuyor devamlı dönmeye devam ediyor. Bu arada ben webservis ve web form kullanıyorum.
Web uygulamasında timer objesi çalışmayacaktır. Timer için ya windows uygulaması ya da windows service yazmanız lazım.
public void Main(int Sayi)
{
timer1.Interval = 10000;
timer1.Elapsed += new ElapsedEventHandler(SaatMail);
timer1.Enabled = true;
}
public void SaatMail(object sender,ElapsedEventArgs e)
{
int Sayi = 0;
MailGonder(Sayi);
}
private void mailgonder(int Sayi)
{
MailMessage mvMail = new MailMessage();
mvMail.To = "[email protected]";
mvMail.From = "asd";
mvMail.Body = "ss";
mvMail.Subject = "ss";
SmtpMail.SmtpServer = "mailserver";
SmtpMail.Send(mvMail);
i++;
if (i == Sayi)
{
timer1.Dispose();
timer1.Close();
timer1.Enabled = false;
timer1.Stop();
}
Default.aspx.cs
int Sayi = Convert.ToInt32(TextBox2.Text);
servis.Main(Sayi);
Kodlarım Bu şekilde burda benim yapmak istediğim asp.net de textboxdan girdiğim veriyi burada ki web serviste sayi değişkeninle karşılaştırarak textbox da girilen kadar belirttiğim aralıklarla mail göndermek.
Teşekkürler.