0

我开发了一个 C#.Net windows 服务,它是一个单一的进程。在这个过程中,我使用 2 个第三方 Dll,一个用于 ZIP(Ionic),另一个用于 Excel(EPPlus)。

.EXE 的工作是:

  1. 读取 SDF 文件
  2. 将 SDF 文件数据写入 SQL Server 表
  3. 生成 Excel
  4. 创建 ZIP

在资源监视器中监视此特定 EXE 时,它显示 10 个线程正在运行。

注意:我没有在这个应用程序中使用任何线程。

操作系统是否使其成为 10 个线程?如果是,如何以及为什么?

4

1 回答 1

0

相关:为什么这个简单的 .NET 控制台应用程序有这么多线程?

我将在 Visual Studio 2010 中使用一个简单的控制台应用程序,该应用程序添加对程序集的引用,该程序集生成一个类似于 3rd 方库可以执行的线程的线程。

Windows 服务可能具有不同的调试技术,并且可能具有由系统创建的各种正在运行的附加线程。

简单控制台

namespace ConsoleApplication1
{
  class Program
  {
    static void Main(string[] args)
    {
      ClassLibrary1.Class1.StartThread();
      while (true)
      {
        System.Threading.Thread.Sleep(1000);
        System.Diagnostics.Trace.TraceInformation("test2");
      }
    }
  }
}

单独的类库程序集中的简单 API,作为对控制台项目的引用添加

using System.Threading.Tasks;

namespace ClassLibrary1
{
  public class Class1
  {
    public static void StartThread()
    {
      var t = new Task(() => {
        while(true)
        {
          System.Threading.Thread.Sleep(1000);
          System.Diagnostics.Trace.TraceInformation("test1");
        }
      });
      t.Start();
    }
  }
}
  1. 开始调试 (F5)
  2. 从菜单调试中,选择“全部中断”
  3. 从菜单调试,选择 Windows 然后线程

下图显示:

  • 主线程,这是控制台应用程序
  • ClassLibrary1.Class1.StartThread.AnonymousMethod_0,这是被引用程序集启动的线程。如果 Ionic 或 3Rd 方 API 启动了一个线程,您可能会看到与其命名空间相关的内容。

中断所有线程

于 2013-05-27T13:16:28.993 回答