Добавление нескольких элементов управления в панель управления потоком не-пользовательского интерфейса в C # - PullRequest
0 голосов
/ 28 июня 2018

Хорошо, я хочу добавить несколько пользовательских элементов управления в панель управления одновременно без блокировки пользовательского интерфейса. Я попытался добавить элементы управления из фонового редактора, но получил сообщение о том, что его нельзя добавить, поскольку он не может изменить родительский контроль или что-то в этом роде, любая помощь будет оценена.

 private void MainScreen_Shown(object sender, EventArgs e)
    {
       SetAnchors();
      // GetFavoritesTVShows(favoritesPage);
        backgroundWorker1.WorkerReportsProgress = true;
        backgroundWorker1.WorkerSupportsCancellation = true;
        if (backgroundWorker1.IsBusy != true)
        {
            // Start the asynchronous operation.
            backgroundWorker1.RunWorkerAsync();
        }
    }

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;
        GetFavoritesTVShows(favoritesPage);
    }

Ошибка: в методе GetFavorTVSHows: flowLayoutPanelSeries.Controls.Add (seriePopular); эта строка

System.InvalidOperationException: 'Межпотоковая операция недопустима: доступ к элементу управления flowLayoutPanelSeries был получен из другого потока, отличного от потока, в котором он был создан.'

Я хочу сделать не замораживающий интерфейс. Моя Flowlayoutpanel берет материалы из базы данных. Поэтому, когда он загружается, пользовательский интерфейс зависает. Я хочу добавить индикатор прогресса, чтобы предотвратить это.

1 Ответ

0 голосов
/ 28 июня 2018

Попробуйте это в своей фоновой ветке.

        this.Invoke((MethodInvoker)delegate 
        {
            //Make your UI changes here
        });

Обновление пользовательского интерфейса допустимо только в потоке пользовательского интерфейса, поэтому вы не сможете сделать это непосредственно из Background Worker. Однако вы можете вызвать изменения, которые будут сделаны в потоке пользовательского интерфейса, из другого потока.

...