-2

私のプロジェクトでは、busyindicatorとを使用ListObjectFirstMethodSecondMethodいます。

プログラムは次のエラーを出します:

別のスレッドがオブジェクトを所有しているため、呼び出し元のスレッドはオブジェクトにアクセスできません

私は次のコードを使用しています:

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.BeginInvokeデリゲート内でを呼び出していContinueWithます。つまり、backgroundworker スレッドで呼び出しています。ui コントロールから取得した Dispatcher を使用します。またはSynchronizationContext、UI コントロールが (作成されている) ときに使用される を使用します。

例: myBusyIndicator.Dispatcher.Invoke(...)、代わりにオフDispatcher.Invoke(...)

于 2013-01-30T20:04:56.610 に答える