我陷入了僵局。 例如,只需每隔10秒做一次服务。 起初我使用了System.Timers.Timer。我的电脑上一切正常。但我遇到了客户的Windows Server 2003服务器上的问题。 System.Timers.Timer timer1_Elapsed没有触发,我已经为System.Threading.Timer更改了这个计时器,我看到了相同的图片。它适用于我的PC,不适用于客户的服务器。 删除所有这些计时器并使用BackgroundWorked完成此任务后 代码:
public partial class XXXService : ServiceBase
{
public XXXService()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("XXXSource1"))
System.Diagnostics.EventLog.CreateEventSource("XXXSource1", "XXXLog");
EventXXXLog.Source = "XXXSource1";
EventXXXLog.Log = "XXXLog";
}
private ManualResetEvent threadSleepEvent = new ManualResetEvent(false);
private BackgroundWorker fBg = new System.ComponentModel.BackgroundWorker();
protected override void OnStart(string[] args)
{
EventXXXLog.WriteEntry("XXX Service has started.");
//fTimer.Enabled = false;
//fTimer.Interval = 1000;
//fTimer.Elapsed += new System.Timers.ElapsedEventHandler(fTimer_Elapsed);
//fTimer.Start();
//fTimer = new System.Threading.Timer(new System.Threading.TimerCallback(fTimer_Elapsed), null, 1000, 5000);
fBg.DoWork += new System.ComponentModel.DoWorkEventHandler(fBg_DoWork);
EventXXXLog.WriteEntry("XXX Service has started. test 2");
fBg.RunWorkerAsync();
EventXXXLog.WriteEntry("XXX Service has started. test 3");
}
void fBg_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
//EventXXXLog.WriteEntry("test 4");
lock (EventXXXLog)
{
EventXXXLog.WriteEntry("test 4");
}
}
}
一切都一样。在我的电脑上一切正常,但它在Server 2003 comp上不起作用。我看到测试1,测试2和测试3日志消息,并没有看到'测试4'。看起来BackgroundWorker不执行fBg_DoWork。
原因是什么?有什么想法吗?
答案 0 :(得分:0)
你是否在
之前登录锁定(EventEDILog)
因为如果EventEDILog被另一个线程锁定并且永远不会解锁 然后阻止你的BackgroundWorker让EventEDILog解锁。