调用线程无法访问该对象,因为另一个线程拥有它

时间:2013-01-30 19:49:59

标签: c# wpf busyindicator

在我的项目中,我有一个busyindicator,我在ListObjectFirstMethod中使用SecondMethod

程序出现以下错误:

  

调用线程无法访问该对象,因为另一个线程拥有它

我使用以下代码:

public static readonly DependencyProperty ListObjectProperty = 
    DependencyProperty.Register("ListObject", typeof(ObservableCollection<FileViewModel>), typeof(MyObjectViewModel), new PropertyMetadata(ChangeCallback));

public ObservableCollection<FileViewModel> ListObject
{
    get { return (ObservableCollection<FileViewModel>)GetValue(ListObjectProperty); }
    set { SetValue(ListObjectProperty, value); }
}

private void SelectedPath()
{
    NavigatePage(new Page2());              
    FirstMethod();
}


private void FilesCase()
{
    var t = new Task(() => this.ThreadFilesCase());

    t.ContinueWith(
        (o) =>
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                IsBusy = false; NavigatePage(new Page3());
            }));
        });

    IsBusy = true;    
    t.Start();
}

private void ThreadFilesCase()
{
       SecondMethod();      
}   

1 个答案:

答案 0 :(得分:1)

您正与Dispatcher.BeginInvoke代表联系ContinueWith。这意味着它在backgroundworker线程上调用。使用从ui控件获取的Dispatcher。或者使用创建ui控件时使用的SynchronizationContext

示例:myBusyIndicator.Dispatcher.Invoke(...),而不是Dispatcher.Invoke(...)