部署我的Windows服務的WIN2K3 Server時,我目前有一個System.Threading.Timer的麻煩上。它的工作原理就好滴答每秒(矯枉過正用於調試)我的本地機器上,當我安裝它,但我把它安裝到服務器後,該服務成功啓動之後再也沒有觸發一次計時器事件。有沒有人遇到類似這種情況?我的大部分研究都發現了.NET 1.1中永遠存在的問題。感謝您的時間和幫助。System.Threading.Timer不滴答作響的Windows Server 2003
protected override void OnStart(string[] args)
{
int interval = Int32.Parse(ConfigurationManager.AppSettings["SleepTime"]) * 1000;
TimerCallback cb = new TimerCallback(ProcessTimerEvent);
QueueWorker worker = new QueueWorker();
workTimer = new Timer(cb, worker, interval, 1000);
}
private static void ProcessTimerEvent(object obj)
{
if (obj is QueueWorker)
{
QueueWorker qw = (QueueWorker)obj;
qw.doWork();
}
}
class QueueWorker
{
public void doWork()
{
// work happening here
}
}
UPDATE:
我發現它是與該服務需要爲運行的用戶。當服務作爲系統運行時,線程工作得很好。任何人都知道用戶需要什麼權限才能運行這些線程?我已經嘗試在本地安全設置中使用「作爲操作系統的一部分」,但這只是導致服務啓動,然後在以我添加的用戶身份登錄時立即失敗。
真的很明顯的問題:什麼是服務器上'SleepTime'在app.config價值?其他選項:改用'System.Timers.Timer'。 – ligos
在我以這種方式實現它之前,我有一個System.Timers.Timer。我在我的服務器上得到了同樣的行爲,服務將啓動,然後定時器事件永遠不會觸發。然後我讀到Win 2k3服務器做了一些有趣的線程工作,而Timer可能無法工作。我的測試目的,SleepTime值現在爲1秒。稍後它會是我不需要測試時所需要的。 – mtgibbs21
你能發佈有關w2k3行爲的鏈接嗎?你可以建立一個控制檯測試應用程序,以排除贏得服務的東西?用'Console.WriteLine'測試也會容易得多。而且,對不起要問愚蠢的問題,「SleepTime」是1000毫秒= 1秒,對吧? – ligos