 <p>You may consider changing your approach, especially if you are doing a lot of GUI updates from your background threads. Reasons:</p> <ul> <li>UI update takes time and it slows down background processing as you have to lock</li> <li>too many updates coming from the background threads will overwhelm the UI and might cause freezes.</li> <li>you probably don't want to update GUI every millisecond or so</li> </ul> <p>What I prefer is to do polling the background thread data instead. Set up GUI timer for say 300ms, then check if there is any data ready to be updated, then do quick update with proper locking. </p> <p>Here is code example:</p> <pre><code> private string text = ""; private object lockObject = new object(); private void MyThread() { while (true) { lock (lockObject) { // That can be any code that calculates text variable, // I'm using DateTime for demonstration: text = DateTime.Now.ToString(); } } } private void timer_Tick(object sender, EventArgs e) { lock(lockObject) { label.Text = text; } } </code></pre> <p>Note, that while the text variable is updated very frequently the GUI still stays responsive. If, instead, you update GUI on each "text" change, your system will freeze.</p>