2010-09-03 17 views
17

Bir windows servis uygulamasına sahibim. Ve konsol modunda çalışarak hata ayıklama.System.Threading.Timer bir süre sonra ateş etmiyor

Burada, http://support.microsoft.com/kb/842793 Timers.Timer öğesinin bir pencere hatası vardır ve Windows servislerinde ateş etmemesi yazılmıştır. Ve geçici çözüm, Threading.Timer kullanmaktır Ve bu makalede .NET 1.0 ve 1.1

Ben .NET 4 kullanıyorum ama bir süre sonra Threading.Timer de ateş etmiyor. Peki bunun nedeni ne olabilir? Ve bir çözüm olarak neler öneriyorsunuz?

sayesinde

Saygılarımızla

DÜZENLEME: Timers.Timer için Threading.Timer den zamanlayıcı değiştirdi ve herhangi bir sorun olmadan çalışıyor.

+1

Bu sorunun çözümünü hızlandırmanın iyi bir yolu, Zamanlayıcı başlatma ve başlatma kodunu göndermektir. – Vokinneberg

+0

Yönetilmeyen herhangi bir kodu kullanıyor musunuz? –

+0

Yerel win32 dll işlevini çağıran, ancak diğer iş parçacığı – AFgone

cevap

47

Çöp toplanmasını önlemek için zamanlayıcınıza bir referans mı tutuyorsunuz? the docs itibaren

:

Sürece bir Timer kullandığınız gibi, sen bir referansı tutmak zorundadır. Herhangi bir yönetilen nesne olan 'da olduğu gibi, bir Zamanlayıcı, numaralı ürüne atıfta bulunulduğunda çöp toplama işlemine tabidir. Zamanlayıcısının hala aktif olması, 'un toplanmasını engellemez. etrafında

+0

evet var bir zamanlayıcı – AFgone

+2

@AFgone bir başvuru var: Nerede olsa? Nasıl toplandığını çöplükte değilsin? –

+2

+1 - Seni seviyorum Jon Skeet, bu beni çıldırtıyordu :) – Tr1stan

4

Çalışır?

Kişisel olarak, çalıştığınız nedenle tam için zamanlayıcıların aksine bir RegisterWaitForSingleObject işlevi kullanmanızı öneririm. RegisterWaitForSingleObject, bir zamanlayıcı için analgous ayarladığınız aralıkta çağrılacak bir temsilci kaydeder ve kolay uygulanabilen süper. Test koşumunu saatlerce çalıştırabilirsin. Windows Services'imde bu aralıklı atış metodunu kullanıyorum ve bu benim için çalışan denenmiş ve gerçek kararlı bir çözüm.

Aşağıdaki bağlantıyı okuyun ve kod örnekleri ve ilerlemeler için makalenin içindeki bağlantılara gidin. Bir Windows hizmeti kullanarak .NET Periyodik Süreci Koşu

:
http://allen-conway-dotnet.blogspot.com/2009/12/running-periodic-process-in-net-using.html

4

Kronometrenizin nesne kapsam dışına gider ve ateş gelen geri aramalar durur bir süre sonra Çöp Toplayıcı tarafından silinir alır.

Sınıftaki bir üyeye başvuruyu kaydedin.

0

Günlüğe kaydetme ve tekrarlayan iş parçacıkları için kurumsal kitaplığı kullanarak bir Windows hizmetinin tam bir örneği. Varsayıcı kitaplığı kullanmıyorsanız, logger.write satırlarını kaldırın.

İlgili konular