在我的项目中,我有一个busyindicator
,我在ListObject
和FirstMethod
中使用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();
}
答案 0 :(得分:1)
您正与Dispatcher.BeginInvoke
代表联系ContinueWith
。这意味着它在backgroundworker线程上调用。使用从ui控件获取的Dispatcher。或者使用创建ui控件时使用的SynchronizationContext
。
示例:myBusyIndicator.Dispatcher.Invoke(...)
,而不是Dispatcher.Invoke(...)