Question: ```
public void timer_thing()
{
    Thread timer = new Thread(new ThreadStart(() =>
      {
          Thread.Sleep(500);
          if (is_mouse_down)
              timer1.Enabled = true;
      }
    ));
    timer.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    //some stuff happens here
}

```

As you can see I want the thread to activate the timer. But the timer doesn't activate. I guess this is not the right way. Or i'm missing something.

Answer: 
It could be that `is_mouse_down` is `false` whenever the thread hits that instruction. The thread is not going to magically wait for it to turn `true`.

However, you have another, bigger problem to worry about. The thing is you cannot touch any UI element from a worker thread or any other other than the UI thread. This includes the `System.Windows.Forms.Timer`. All sorts of undefined chaos may ensue. Your application may fail unpredictably and spectacularly.

It is not really clear to me why a thread is needed in the first place. Can you not handle the `Control.MouseDown` event and enable the timer in the event handler for that event? That is how I would solve the problem.
Your thread isn't waiting for the `is_mouse_down` event. It just checks after half a second and if it's not the time won't get enabled and the tread closes. Maybe you should try using an event?