-2

在我的项目中,我有一个busyindicator并且我正在使用ListObjectinFirstMethodSecondMethod.

该程序给出以下错误:

调用线程无法访问该对象,因为不同的线程拥有它

我正在使用以下代码:

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();      
}   
4

1 回答 1

1

Dispatcher.BeginInvokeContinueWith代表内打电话。这意味着它正在后台工作线程上调用。使用从 ui 控件获得的 Dispatcher。或者使用在SynchronizationContext(正在)创建 ui 控件时使用的 。

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

于 2013-01-30T20:04:56.610 回答