Я пытаюсь добавить загрузочный datamodel и загружать элементы в список в другом потоке, потому что загрузка 50 элементов в listbox занимает много времени (около 5 секунд).BackgroundWOker Недопустимый доступ к перекрестным потокам
У меня проблема с BackgroundWorker это показать мне ошибку неправильного пароля кросс-нить
His является код 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
Полагаю, что это ваша 'LoadData', поскольку она обращается к элементу' ItemsSource' элемента управления пользовательского интерфейса. Вы должны вызвать вызов на 'Диспетчер', я думаю, хотя я точно не помню. –
Вы можете найти один из многих тысяч вопросов об этом здесь и на других сайтах. Это вопрос, заданный несколько раз в день ... Просто взгляните на «Связанные» потоки на боковой стороне экрана. – Servy