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: 191

Filed under:
|
|

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

Related posts about wpf

Related posts about threading