C# 将多个控件添加到C中非ui线程的流面板中

C# 将多个控件添加到C中非ui线程的流面板中,c#,winforms,progress-bar,backgroundworker,flowlayoutpanel,C#,Winforms,Progress Bar,Backgroundworker,Flowlayoutpanel,好的,我想一次将多个用户控件添加到一个流面板中,而不冻结UI,我尝试从后台工作人员添加控件,但由于无法更改父控件或类似内容,因此无法添加控件时出现错误,请提供帮助 private void MainScreen_Shown(object sender, EventArgs e) { SetAnchors(); // GetFavoritesTVShows(favoritesPage); backgroundWorker1.WorkerRepor

好的,我想一次将多个用户控件添加到一个流面板中,而不冻结UI,我尝试从后台工作人员添加控件,但由于无法更改父控件或类似内容,因此无法添加控件时出现错误,请提供帮助

 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.AddseriePopular;这条线

System.InvalidOperationException:“跨线程操作无效:“flowLayoutPanelSeries”控件是从创建它的线程以外的其他线程访问的。”


我想做非冻结用户界面。我的flowlayoutpanel正在从数据库中获取材料。因此,当它加载时,UI冻结。我想添加进度条以防止出现这种情况。

在后台线程中尝试此操作

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

更新UI只在UI线程中有效,因此您无法直接从后台工作人员进行更新。但是,您可以从另一个线程调用要在UI线程上进行的更改。

您要添加多少个控件?向面板添加一些控件不会花费足够长的时间来冻结用户界面,使其停留在人类可感知的时间内。能否将特定错误添加到问题详细信息中?我正在从web下载。图像、文本等,所以加载需要很长时间。创建后台工作程序除了封送回UI线程之外,什么都不做是没有意义的。在这一点上,您最好不要首先创建BGW。@Servy如果不了解OP中的更多细节,我们并不真正了解后台线程正在执行的所有操作。他们提到无法访问UI线程,这是他们在问题中特别提到的解决方案,他们创建BGW是为了添加控件以防止UI冻结。@请重新阅读。他们并没有说BGW是专门用于此目的的,只是他们试图做的事情涉及从BGW访问UI线程。众所周知,BGW已经在做其他工作,更新UI只是其中的一部分。如果OP能澄清这一点,那就太好了,但做出这样的大假设对任何人都没有帮助。他们说他们正在尝试向面板添加控件,而UI被冻结,所以他们将代码移动到BGW,在那里出错,因为它是从非UI线程编辑UI。