Windows服务中的多线程

时间:2014-09-02 13:03:36

标签: c# windows multithreading service windows-services

我有一个Windows服务执行两个函数(函数1和函数2),但是函数2需要5分钟才能执行(在DB中审核用户)。

当我启动该服务时,会显示一条超时消息:' ERROR:1053'。因为function2运行缓慢,但如果我评论function2,那么服务运行正常。

我认为MultiThread是解决问题的方法,但我从不使用此功能,如何在此服务中实现MultiThread?

我的启动功能:

protected override void OnStart(string[] args)
    {
        // TODO: Add code here to start your service.
        Function1();
        Function2();

        aTimer.Enabled = true;
        eventLog1.WriteEntry("Starting");
    }

3 个答案:

答案 0 :(得分:0)

您可以使用任务。那会更容易。

如果Function2()取决于Function1(),那么您可以执行以下操作:

Task.Run(() =>
{
    Function1();
    Function2();

    aTimer.Enabled = true;
}
eventLog1.WriteEntry("Starting");

我不确定您是否希望在aTimer.Enabled内或外部调用Task.Run。这取决于你使用它的目的。

如果Function1()Function2()是独立的,您可以同时执行以下操作:

Task.Run(()=>
{
    Parallel.Invoke(()=>
    {
       Function1();
    },
    ()=>
    {
       Function2();
    }
}

这将同时执行Function1()Function2()

答案 1 :(得分:0)

Thread temp_thread = new Thread(function);
temp_thread.Start();

答案 2 :(得分:0)

您可以尝试以下方法:

Thread thread1 = new Thread(new ThreadStart(Funtion1));
Thread thread2 = new Thread(new ThreadStart(Function2));
thread1.Start();
thread2.Start();

我希望这能让你的工作完成。