【问题标题】:Multiple threads in windows serviceWindows服务中的多个线程
【发布时间】:2012-08-16 10:32:31
【问题描述】:

我有 windows 项目和一个表单,每 5 秒有一个计时器。

它从名为 table time wise 和 condition wise 的请求中调用和处理方法。

但是我有一些方法类型需要太多时间来响应并且希望这些方法在单独的线程中。这样我就可以在单独的线程和同步中运行这两种请求类型。

如何使用线程——多异步线程将它们分开?

【问题讨论】:

  • 你有一个“一个表单”的“windows服务”?困惑。
  • 是的,我有 Windows 项目,并且有一个表单作为一项服务在后台运行 (myproject.exe)。

标签: c# multithreading timer windows-services thread-safety


【解决方案1】:

我建议您查看 .NET 4.0 Task 类。每次都触发完整的线程可能是矫枉过正。任务与定时器一起使用底层线程池并行执行工作。

使用Task 非常简单:

Task t = Task.Factory.StartNew(
       () => 
       {
           // task code here
       });

【讨论】:

    【解决方案2】:
    using System;
    using System.Threading;
    
    class Program
    {
        static void Main()
        {
        Thread thread1 = new Thread(new ThreadStart(A));
        Thread thread2 = new Thread(new ThreadStart(B));
        thread1.Start();
        thread2.Start();
        thread1.Join();
        thread2.Join();
        }
    
        static void A()
        {
        Thread.Sleep(100);
        Console.WriteLine('A');
        }
    
        static void B()
        {
        Thread.Sleep(1000);
        Console.WriteLine('B');
        }
    }
    

    Threading Tutorial

    【讨论】:

    • 所以这意味着,我的服务将调用方法 A 和 B async .. 如果 A 等待 10 分钟,那么 B 将异步调用并执行其代码对吗?
    • 这个例子中实际上有三个线程——两个Thread对象和主UI线程。这种方法的缺点是主 UI 线程被锁定,直到两个 Thread 对象完成它们的工作。
    • 谢谢.. 我想这样做是因为我有很多请求及其各自的服务方法要执行,但有些请求方法需要太多时间和很多过程,所以希望那些在单独的线程中以便其他小的请求方法可以轻松进入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2013-07-20
    相关资源
    最近更新 更多