Actualización de la interfaz de usuario con BackgroundWorker en WPF

Actualmente estoy escribiendo una aplicación WPF 3.5 simple que utiliza el COM de SharePoint para hacer llamadas a sitios de SharePoint y generar información de Grupo y Usuario. Como este proceso tarda un tiempo, quiero mostrar una Barra de progreso mientras se generan los grupos. El proceso deseado es el siguiente:

El usuario ingresa la URL y hace clic en el botón para obtener los datos del sitio.ProgressBar comienza la animación.Los grupos se generan y los nombres se agregan a un ListViewAl finalizar, finaliza la animación de ProgressBar.

El problema que estoy encontrando es que la interfaz de usuario nunca se actualiza. Ni la Barra de progreso ni la Vista de lista realizan cambios. Si alguien tiene alguna idea para ayudar con el código a continuación, sería muy apreciado.

private void GetGroupsAndUsersButton_Click(object sender, RoutedEventArgs e)
{
    siteUrl = "";

    if (SiteURLTextBox.Text.Length > 0)
    {
        FetchDataProgressBar.IsIndeterminate = true;

        mWorker = new BackgroundWorker();
        mWorker.DoWork += new DoWorkEventHandler(worker_DoWork);
        mWorker.WorkerSupportsCancellation = true;
        mWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
        mWorker.RunWorkerAsync();
    }
    else
    {
        System.Windows.MessageBox.Show("Please enter a URL for the SharePoint site you wish to retrieve data");
    }
}

private void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
    siteUrl = SiteURLTextBox.Text;
    GroupListView.ItemsSource = null;

    try
    {
        using (SPSite site = new SPSite(siteUrl))
        {
            SPWeb web = site.OpenWeb();
            SPGroupCollection collGroups = web.SiteGroups;
            if (GroupNames == null)
                GroupNames = new List<string>();

            foreach (SPGroup oGroup in collGroups)
            {
                GroupListView.Items.Add(new ListViewItem() { Content = oGroup.Name });
            }

            foreach (ListViewItem item in GroupListView.Items)
            {
                item.MouseLeftButtonUp += item_MouseLeftButtonUp;
            }
        }
    }
    catch (Exception ex)
    {
        System.Windows.MessageBox.Show("Unable to locate a SharePoint site at: " + siteUrl);
    }
}

private void worker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
    FetchDataProgressBar.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
    new Action(
        delegate()
        {
            FetchDataProgressBar.IsIndeterminate = false;
        }
        ));
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta