【发布时间】:2013-04-08 14:07:26
【问题描述】:
我尝试在另一个线程上添加加载数据模型并将项目加载到列表框,因为将 50 个项目加载到列表框需要很长时间(大约 5 秒)。
BackgroundWorker 有问题,它显示错误无效的跨线程访问
他是 Inbox.xaml 的代码
public Inbox()
{
InitializeComponent();
DataContext = App.ViewModel;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
ProgressIndicator progress = new ProgressIndicator
{
IsVisible = true,
IsIndeterminate = true,
Text = "Načítání"
};
SystemTray.SetProgressIndicator(this, progress);
SystemTray.IsVisible = true;
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
backgroundWorker.RunWorkerAsync();
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
LoadData();
}
void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
else
{
SystemTray.IsVisible = false;
}
}
private void LoadData()
{
try
{
(this.DataContext as MainViewModel).LoadInboxData();
}
finally
{
TasksListBox.ItemsSource = (this.DataContext as MainViewModel).Tasks;
}
}
我做错了什么?
【问题讨论】:
-
您遇到什么错误?你能发布堆栈跟踪吗?
-
猜测是您的
LoadData,因为它正在访问 UI 控件的ItemsSource。我想你需要调用Dispatcher,虽然我记不清了。 -
您可以在此处和其他网站上搜索数以千计的问题之一。这是一个一天要问好几次的问题……看看屏幕一侧的
Related线程。
标签: c# multithreading silverlight windows-phone-7 xaml