我嘗試添加加載數據模型並將項目加載到另一個線程上的列表框,因爲將50個項目加載到列表框需要很長時間(大約5秒)。BackgroundWOrker無效的跨線程訪問
我有一個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;
}
}
的
他是代碼?
你得到什麼錯誤?你可以發佈堆棧跟蹤嗎? – Shark 2013-04-08 14:09:18
當它訪問UI控件的ItemsSource時,會猜測它是你的'LoadData'。你需要調用'Dispatcher'上的調用,我認爲,儘管我記不清楚了。 – 2013-04-08 14:11:29
您可以在這裏和其他網站上搜索成千上萬個有關此問題的其中一個。這是一個每天要問幾次的問題......只要看看屏幕側面的'Related'線程即可。 – Servy 2013-04-08 14:12:51