在C#中的非UI线程上向流面板添加多个控件

时间:2018-06-28 14:46:22

标签: c# winforms progress-bar backgroundworker flowlayoutpanel

好的,我想一次将多个用户控件添加到流面板中而不会冻结UI,我尝试从Background Worker中添加控件,但是由于无法添加而无法添加它时出现错误更改父控件或类似的控件,将不胜感激。

 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);
    }

错误:在GetFavoritesTVSHows方法中:flowLayoutPanelSeries.Controls.Add(seriepopular);这条线

System.InvalidOperationException:'跨线程操作无效:'flowLayoutPanelSeries'控件是从创建该线程的线程之外的另一个线程访问的。'

我想做非冻结UI。我的flowlayoutpanel正在从数据库中获取资料。因此,在加载时,UI冻结。我想添加进度条来防止这种情况。

1 个答案:

答案 0 :(得分:-1)

在后台线程上尝试一下。

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

更新UI仅在UI线程中有效,因此您将无法直接从Background Worker中进行更新。但是,您 能够从另一个线程调用要在UI线程上进行的更改。