private void btn_publish_Click(object sender, EventArgs e)
{
  for (int i = 0; i < 3; i++)
  {
    int temp = i;
    //Task.Factory.StartNew(() => worker(temp)); // もちろんThreadPoolでもいい
    ThreadPool.QueueUserWorkItem(_ => worker(temp)); // もちろんThreadPoolでもいい
  }
}

void worker(int i)
{
  Invoke(new DelegatePublishQuery(PublishQuery),i);
}

private void PublishQuery(int i)
{
  while(true)
  {
    lbl_status.Text = " i = [" + i.ToString() + "]";
    Thread.Sleep(10000); //10秒待機
  }
}

スレッドでループをかけているにも関わらず、次のスレッドのみ生きている様です。
i = 0 や i = 1 のスレッドは死んだのでしょうか?
i = [2]