Merhabalar,
Threadlerle çalışmak eğer iyi derece thread bilgisine sahip değilseniz başınızı çok derde sokar. Aşağıda sizin için hazırlamış olduğum bir kod var. Çok stabil çalıştığı söylenemez zira istediğiniz şeyde zaten stabil çalışabilecek birşey değil pek. Tam olarak işinizi görmese de fikir vermesi açısından kodu kullanabilirsiniz..
İyi çalışmalar..
using System;
using System.Collections.Generic;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }

        private long toplam = 0;
        private int birMilyar = 1000000000;
        private long kacaKadarToplanacak = 0;
        private bool bitti = false;
        private List<Thread> trList;
        private System.Diagnostics.Stopwatch st;

        private void TrSonlandir()
        {
            if (trList == null)
                return;
            foreach (var item in trList)
            {
                try
                {
                    item.Abort();
                }
                catch
                {
                }
            }
            trList = null;
        }
        private void Bitir()
        {
            if (bitti)
                return;
            if (toplam > birMilyar)
                toplam = birMilyar;
            label1.Text = "Toplam = " + this.toplam.ToString();            
            kacaKadarToplanacak = 0;
            bitti = true;
            st.Stop();
            var time = st.Elapsed;            
            label3.Text = time.Seconds + " saniyede bitti!";
            MessageBox.Show("Toplama bitti!");
        }
       
        private void button1_Click(object sender, EventArgs e)
        {
            int girilen = int.Parse(textBox1.Text);
            kacaKadarToplanacak = birMilyar / girilen;
            label2.Text = girilen + " thread ile başladı..";
            label1.Text = "";
            label3.Text = "";
            bitti = false;
            trList = new List<Thread>();
            st = new System.Diagnostics.Stopwatch();
            st.Start();
            for (int i = 0; i < girilen; i++)
            {
                var tr = new Thread(new ThreadStart(() =>
                    {
                        for (int j = 1; j <= kacaKadarToplanacak; j++)
                        {
                            if (bitti)
                            {
                                break;
                            }
                            if (this.toplam >= birMilyar)
                            {
                                Bitir();
                            }
                            else
                            {
                                try
                                {
                                    this.toplam += j;
                                    label1.Text = "Toplam = " + this.toplam.ToString();
                                }
                                catch
                                {
                                }
                            }
                        }
                    }));
                trList.Add(tr);
                tr.Start();
            }
        }
    }
}