Windows服务中的事件处理程序问题

时间:2011-01-05 14:49:28

标签: c# events windows-services timer

我疯了。我无法弄清楚问题。

我有一个Windows服务,它有一个简单的计时器方法。如果我启动该服务,它总是在onTimerElapsed事件中发出异常。但是如果我用不同的方法编写XMLOperation方法(但不是我只需要的计时器)并从program.cs调用它,它就可以正常工作。工作代码也位于底部。

partial class DatabaseService : ServiceBase
{
    Timer timer = new Timer();

    public DatabaseService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {   
        timer.Interval = 10000;
        timer.Enabled = true;

        timer.Elapsed += new ElapsedEventHandler(onElapsedTime);
        timer.Start();
    }

    protected override void OnStop()
    {
        timer.Enabled = false;
    }

    public void onElapsedTime(object source, ElapsedEventArgs e)
    {
        try
        {
            XMLOperations operation = new XMLOperations();
            operation.WebServiceFlexiCampaigns("http://www.flexi.com.tr/data/xml/pazaryeri/mobil.xml");
            operation.WebServiceShopMilesCampaignsXMLRead("http://www.shopandmiles.com/xml/3_119_3.xml");
            operation.WebServiceBonusCampaignsXMLRead("http://www.bonus.com.tr/apps/getcampaignxml.aspx?type=campaigns");
        }

        catch (Exception ex)
        {
            StreamWriter SW;
            SW = File.CreateText("c:\\1.txt");
            SW.WriteLine(ex.Message);
            SW.Close();
        }

    }

这是工作的,但这次我无法像在计时器事件中那样在一段时间内设法使用该代码。我从program.cs手动调用test方法

partial class DatabaseService : ServiceBase
{
    Timer timer = new Timer();

    public DatabaseService()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        timer.Interval = 10000;
        timer.Enabled = true;

        timer.Elapsed += new ElapsedEventHandler(onElapsedTime);
        timer.Start();
    }

    protected override void OnStop()
    {
        timer.Enabled = false;
    }
    public void test()
    {
        try
        {
            XMLOperations operation = new XMLOperations();
            operation.WebServiceFlexiCampaigns("http://www.flexi.com.tr/data/xml/pazaryeri/mobil.xml");
            operation.WebServiceShopMilesCampaignsXMLRead("http://www.shopandmiles.com/xml/3_119_3.xml");
            operation.WebServiceBonusCampaignsXMLRead("http://www.bonus.com.tr/apps/getcampaignxml.aspx?type=campaigns");
        }
        catch (Exception ex)
        {
            StreamWriter SW;
            SW = File.CreateText("c:\\1111.txt");
            SW.WriteLine(ex.Message);
            SW.Close();
        }
    }

1 个答案:

答案 0 :(得分:1)

你可以尝试这个帖子(参见SamAgain回复):

http://social.msdn.microsoft.com/Forums/en/clr/thread/8fbca78b-5078-4a12-8abb-4051076febbb

希望它能奏效。