在C#中一次计算活动线程数

时间:2018-03-23 05:09:44

标签: c# windows multithreading

我正在使用fileSystemWatcher和Created事件监听器我正在启动一个新的Thread来处理文件内容并做一些耗时的操作。代码如下所示

    fileSystemWatcher = new FileSystemWatcher(folderToWatchFor);
    fileSystemWatcher.EnableRaisingEvents = true;       
    fileSystemWatcher.Created += new FileSystemEventHandler(FileCreated);

    private void FileCreated(Object sender, FileSystemEventArgs e)
    {

        string file_path = e.FullPath;
        string file_name = e.Name;
        Thread thread = new Thread(() => processFileThread(file_name, file_path));
        thread.Start();
        //count the active threads here??
    }

我喜欢获取活动的线程数,以便一次查看有多少活动线程,为此我使用了

System.Diagnostics.Process.GetCurrentProcess().Threads.Count

但它为我带来了不同的重要性。就像我简单地复制了1个文件一样,所以只有1个线程处于活动状态,但上面的代码返回了23个。

那么我如何计算函数FileCreated()

中启动的活动线程

1 个答案:

答案 0 :(得分:0)

private int _threadCounter = 0;
private object _threadCounterLock = new object();

lock(_threadCounterLock)
  _threadCounter++;

将返回应用程序的所有线程。 没有直接的可能性只能获得自己的线程。在操作系统之上,线程是.net框架本身的线程(由于这个线程数量很大)。

如果使用静态变量,请确保由于多线程访问而实现锁定/互锁。

profileUrl: Observable<string | null>;

  ngOnInit() {
    this.speakerService.getSpeakers().subscribe(speakers => {
      this.speakers = speakers;
      for(let i = 0; i < speakers.length; i++) {
        const ref = this.storage.ref(this.speakers[i].profilePath);
        this.profileUrl = ref.getDownloadURL();
        console.log(this.profileUrl);
      }          
    });
  }