I apologize for posting on an old thread, but I had the exact same question, and there did not seem to be an answer to this one. Someone mentioned using a timer, but my cross-thread could take several seconds, several minutes, or several hours. I think I came up with an answer, so for future searchers I decided to post. I would test the ToolStrip that contained the button. This code seems to work to enable a toolstripbutton when a thread is done. public void Enable() { if (toolStrip.InvokeRequired) { EnableButtonCallback d = new EnableButtonCallback(Enable); toolStrip.Invoke(d, new object[] { }); } else { button.Enabled = true; } }