-6

リストボックスに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;
        }
    }

私は何を間違っていますか?

4

2 に答える 2