En iyi yanıtlayıcılar
Timer ve FileSystemWatcher kullanımı

Soru
-
Merhaba Arkadaşlar,
FileSystemWatcher ile dosya dinletip belirli bir süre sonra timer çalıştırıyorum FileSystemWatcher ve timer başlatılmasında sorun yok fakat OnTimerEvent içerisinde time ı timer.stop yaptık dan sonra ve dosya içerisinde değişiklik yapıp event tetiklendiğinde timer ı tekrar start olmuyor unuttuğum bir şey mi var acaba.
FileSystemWatcher fsw() { FileSystemWatcher fw = new FileSystemWatcher(); if (Settings.Instance.GetValue(Information.OtomatikUrunAlimi).ToBoolean()) { fw = new FileSystemWatcher("c:\\TEST") { EnableRaisingEvents = true, Filter = "*.DAT", IncludeSubdirectories = false }; } return fw; } public void Dinle() { if (Settings.I fsw().Changed += new FileSystemEventHandler(Degisiklik); } Timer tmr = new Timer() { Interval = 6000, Enabled = true }; public void Degisiklik(object sender, FileSystemEventArgs e) { PathName = e.FullPath; FileName = e.Name; count = 0; tmr.Tick += new EventHandler(OnTimerEvent); tmr.Start(); } private void OnTimerEvent(object sender, EventArgs e) { Mesaggebox.MsgBox("Ok"); tmr.Stop(); }
- Düzenleyen csharpp 30 Haziran 2016 Perşembe 07:37
Yanıtlar
-
1. tmr.Enabled = true; kullan.
2. Degisilik isimli methodundaki tmr.Tick += li satırı kaldır. Böyle yaparsan o methodu tekrar tekrar eklemiş olursun. Bu durumda her tick de OnTimerEvent methodu defalarca çalışır. Bu method bağlama işini sadece 1 kere yap.
3. Amacın değişiklikten 6sn sonra iş yapmak ise Timer yerine await Task.Delay(6000) gibi kullanım daha iyi olacaktır.
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 3 Temmuz 2016 Pazar 22:17
Tüm Yanıtlar
-
1. tmr.Enabled = true; kullan.
2. Degisilik isimli methodundaki tmr.Tick += li satırı kaldır. Böyle yaparsan o methodu tekrar tekrar eklemiş olursun. Bu durumda her tick de OnTimerEvent methodu defalarca çalışır. Bu method bağlama işini sadece 1 kere yap.
3. Amacın değişiklikten 6sn sonra iş yapmak ise Timer yerine await Task.Delay(6000) gibi kullanım daha iyi olacaktır.
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 3 Temmuz 2016 Pazar 22:17
-
-
-
-
Framweork 4.5 de çalıştı abi peki Cihan abi öğrenmek için soruyourm timer dan daha mı hızlı bu acaba.
evet, daha hızlı, o 4.5 sayısı ordan geliyor zaten, 6 saniyeyi 4.5 saniyede alıyor.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Düzenleyen Önay YALÇINER 30 Haziran 2016 Perşembe 13:39
-
Daha yavaş olsa 6000 değil 5000 yazarsın :)... Mesele hız meselesi değil. Senin amacın uygulamayı geciktirmek. Öyleyse timer gibi periyodik iş yapma amacı olan bir nesne yerine asıl amacı bekleme olan bir şey kullanman daha uygun düşer. Gereksiz yere bellekte timer oluşturmanın anlamı yok. async/await ise bu bekleme sırasında arayüzünün kilitlenmemesi için.
Frameworkler arası hız farkında gelince @Önay 'a tamamen katılıyorum.
- Düzenleyen Cihan YakarMVP 30 Haziran 2016 Perşembe 15:19
-