title: Simple Threading, why does this happen? (C# WinForms)
body: <p>I'm currently exploring threading implementation in C# WinForms and I created this simple app:</p>
  
  <p>I'm just wondering why the memory usage of this app keeps growing after I start, stop, start, and stop again the application. I'm having a thought that my thread instance doesn't really terminate or abort when I press the stop button. Please consider my code below, and any help or suggestions will be greatly appreciated. </p>
  
  <p><img src="https://i.stack.imgur.com/gNANv.png" alt="alt text"></p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Linq;
  using System.Text;
  using System.Windows.Forms;
  using System.Threading;
  
  namespace ThreadingTest
  {
      public partial class Form1 : Form
      {
          private delegate void TickerDelegate(string s);
          bool stopThread = false;
          TickerDelegate tickerDelegate1;
          Thread thread1;
  
          public Form1()
          {
              InitializeComponent();
              tickerDelegate1 = new TickerDelegate(SetLeftTicker);
          }
  
          private void Form1_Load(object sender, EventArgs e)
          {
              thread1 = new Thread(new ThreadStart(disp));
              thread1.Start();
          }
  
          void disp()
          {
              while (stopThread == false)
              {
                  listBox1.Invoke(tickerDelegate1, new object[] { DateTime.Now.ToString() });
                  Thread.Sleep(1000);
              }
          }
  
          private void SetLeftTicker(string s)
          {
              listBox1.Items.Add(s);
          }
  
          private void btnStop_Click(object sender, EventArgs e)
          {
              stopThread = true;
              if (thread1.IsAlive)
              {
                  thread1.Abort();
              }
          }
  
          private void btnStart_Click(object sender, EventArgs e)
          {
              stopThread = false;
              thread1 = new Thread(new ThreadStart(disp));
              thread1.Start();
          }
  
          private void btnCheck_Click(object sender, EventArgs e)
          {
              if (thread1.IsAlive)
              {
                  MessageBox.Show("Is Alive!");
              }
          }
  
          private void btnClear_Click(object sender, EventArgs e)
          {
              listBox1.Items.Clear();
          }
      }
  }
  </code></pre>