WPF: issue updating UI from background thread
        Posted  
        
            by Ted Shaffer
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Ted Shaffer
        
        
        
        Published on 2010-05-18T18:00:39Z
        Indexed on 
            2010/05/18
            18:30 UTC
        
        
        Read the original article
        Hit count: 240
        
My code launches a background thread. The background thread makes changes and wants the UI in the main thread to update. The code that launches the thread then waits looks something like:
                Thread fThread = new Thread(new ThreadStart(PerformSync));
                fThread.IsBackground = true;
                fThread.Start();
                fThread.Join();
                MessageBox.Show("Synchronization complete");
When the background wants to update the UI, it sets a StatusMessage and calls the code below:
    static StatusMessage _statusMessage;
    public delegate void AddStatusDelegate();
    private void AddStatus()
    {
        AddStatusDelegate methodForUIThread = delegate
        {
            _statusMessageList.Add(_statusMessage);
        };
        this.Dispatcher.BeginInvoke(methodForUIThread, System.Windows.Threading.DispatcherPriority.Send);
    }
_statusMessageList is an ObservableCollection that is the source for a ListBox.
The AddStatus method is called but the code on the main thread never executes - that is, _statusMessage is not added to _statusMessageList while the thread is executing. However, once it is complete (fThread.Join() returns), all the stacked up calls on the main thread are executed.
But, if I display a message box between the calls to fThread.Start() and fThread.Join(), then the status messages are updated properly.
What do I need to change so that the code in the main thread executes (UI updates) while waiting for the thread to terminate?
Thanks.
© Stack Overflow or respective owner