我无法在窗口服务中创建线程

时间:2012-02-06 14:04:43

标签: c# windows multithreading

我陷入了僵局。 例如,只需每隔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。

原因是什么?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你是否在

之前登录

锁定(EventEDILog)

因为如果EventEDILog被另一个线程锁定并且永远不会解锁 然后阻止你的BackgroundWorker让EventEDILog解锁。