的BackgroundWorker

Pre*_*eti -1 c# backgroundworker

如何与后台线程一起维护前台线程.如果我尝试在工作中将项添加到列表中,它会给我一个跨线程异常.

Dan*_*Tao 8

通常,UI更新可能只能从UI线程本身执行.

使用a执行此操作的机制BackgroundWorker是调用worker的ReportProgress方法(确保WorkerReportsProgress = true).此方法将引发ProgressChanged事件,由UI线程处理.

因此,如果您想要向ListBox控件添加项目,例如,基于您BackgroundWorker正在进行的某些工作,请调用ReportProgress并传递您需要的任何数据作为参数.此数据将存储在事件提供的UserState属性中ProgressChangedEventArgs.您的事件处理程序可以获取此数据并ListBox使用它填充.

或者,您可以通过处理工作人员的RunWorkerCompleted事件在最后添加所有内容.如果您的工作人员执行的工作不会花费那么长时间,这通常是可取的,因为它更简单并且它更少地强调UI(执行的离散更新更少).