我正在创建一个后台工作线程并在其中加载数据并在UI中显示。 我知道问题是在UI中显示数据(因为它是一个UI线程) 但我从块的形式从服务器获取数据。 假设第一次接收10条记录,那么我必须更新Ui,然后调用下一条记录。跨线程操作在C#中无效吗?
如何解决此问题? 谢谢。
我正在创建一个后台工作线程并在其中加载数据并在UI中显示。 我知道问题是在UI中显示数据(因为它是一个UI线程) 但我从块的形式从服务器获取数据。 假设第一次接收10条记录,那么我必须更新Ui,然后调用下一条记录。跨线程操作在C#中无效吗?
如何解决此问题? 谢谢。
如果您使用的是BackgroundWorker
,则必须使用报告进度功能。
我通常所做的就是完成DoWork方法中所需的工作,并且当您要更新GUI时,请拨打worker.ReportProgress
并提供所需的数据。然后在报告进度方法中,更新GUI,因为该方法将在GUI线程上运行。另外请确保您将WorkerReportsProgress
设置为true,否则尝试拨打ReportProgress
时您会遇到异常情况。
但我的要求是获取一些n记录(比如说10)更新UI然后调用另一条记录然后更新UI.When我之后调用updateUI 10条记录给出了交叉线程异常。 – user662285 2012-02-21 07:00:32
这是我的观点。在DoWork中,获得10条记录,然后调用ReportProgress并更新GUI,在DoWork中获得10条记录,并再次调用ReportProgress。继续阅读所有记录。 – 2012-02-21 07:20:17
报告进度期望百分比参数我应该给那个... – user662285 2012-02-21 07:28:24
那么问题是什么? – 2012-02-21 06:39:10
问题是当我调用UpdateUserUI()方法时,它给出的错误“交叉线程操作无效” – user662285 2012-02-21 06:42:27