所有线程完成后线程计数器读数大于零

Thread counter reading greater than zero after all threads have completed

我的程序中有一个线程计数器,当我的所有线程都完成时它应该为 0。我首先在我的工作线程和线程的开头使用 threads++ - 最后,但在所有线程完成后我的计数器读数为 145。所以我将它们并排放置,如下所示,它仍然没有读取 0,现在在所有线程完成后读取 8。这怎么可能?我正在将大约 13000 封邮件的数据保存到 sql 服务器数据库。每条消息调用 ProcessMailMessage 一次。

        int threads = 0;

        public bool ProcessMailMessage(byte[] mymsg, string username, string folder)
        {
            BackgroundWorker bg = new BackgroundWorker();

            bg.DoWork += (sss, res) => {
                
                threads++;
                threads--;
               // save some data to database

            };

            bg.RunWorkerAsync();

            return true;
        }

我通过在调用 RunWorkerAsync() 之前递增计数器并在 RunWorkerComplete 事件中递减来解决这个问题

            bg.RunWorkerCompleted += (s, res) =>
            {
                threads--;
            };

            threads++;
            bg.RunWorkerAsync();