You also mentioned interacting with form controls from the background thread. Perhaps that was done in a way that blocks the UI. The code you have shown doesn't have any obvious issues in it. However, you can put a breakpoint on the first line in the timer event, and step through it. If it is blocking somewhere, you will see it. If it isn't, and the timer event code finishes up normally, then it is the background thread itself that is blocking the UI thread. Without seeing the code, nobody can answer that definitively. However, if there is lots of code...perhaps nobody can answer definitively anyhow.

The first thing I would do would be to step through the timer event. That shouldn't cause a problem as you have it now, so the next thing I would do would be to take a look at any interactions between the thread and the UI.