나는 목록 상자에 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
UI 컨트롤의'ItemsSource'에 접근 할 때'LoadData'라고 추측합니다. 내가 정확하게 기억할 수는 없지만, 생각하는'Dispatcher '에 대한 호출을 호출해야합니다. –
여기 및 기타 사이트에서 수천 가지 질문 중 하나를 검색 할 수 있습니다. 이것은 하루에 여러 번 질문하는 질문입니다 ... 화면의 '관련'스레드를 살펴보십시오. – Servy