Vb.net backgroundworker完成后,如何优先更新UI线程?

Vb.net backgroundworker完成后,如何优先更新UI线程?,vb.net,multithreading,winforms,backgroundworker,Vb.net,Multithreading,Winforms,Backgroundworker,我有一个后台工作人员,我正在使用它运行一个大型函数,希望加快我的窗口加载和响应速度。当我把这个函数放在backgrounderworker的doWork事件中时,我只是想知道是否还有其他方法,我可以在BGW完成后立即优先更新该文本,而不是等待UI线程完成,然后更新文本框。这可能吗?我之所以问这个问题,是因为在运行完这个函数(大约需要1.5-2秒)之后更新文本框似乎需要花费相当多的时间,但即使我在加载窗口之前启动BGW(加载需要5秒钟),它仍然是我窗口上最后一个要更新的项目,所以我想(如果可能的话

我有一个后台工作人员,我正在使用它运行一个大型函数,希望加快我的窗口加载和响应速度。当我把这个函数放在backgrounderworker的doWork事件中时,我只是想知道是否还有其他方法,我可以在BGW完成后立即优先更新该文本,而不是等待UI线程完成,然后更新文本框。这可能吗?我之所以问这个问题,是因为在运行完这个函数(大约需要1.5-2秒)之后更新文本框似乎需要花费相当多的时间,但即使我在加载窗口之前启动BGW(加载需要5秒钟),它仍然是我窗口上最后一个要更新的项目,所以我想(如果可能的话),暂停UI线程更新UI,直到使用此函数返回的内容更新,然后继续更新其余标签


另外,是否需要一次更新两个单独的项目,还是仅限于一个UI线程?

如果要更新UI元素,必须在UI线程上进行更新。当
BackgroundWorker
完成时,会在UI线程上引发
RunWorkerCompleted
事件。如果UI线程正忙于执行某些操作,则完成的事件必须等待。通常,没有安全的方法来中断UI线程,让它处理
RunWorkerCompleted
事件,然后返回到它正在做的事情

必须从UI线程更新UI元素。因此,您不能同时更新两个单独的项目

我不知道您的初始化是如何构造的,但是如果您有一组项目可以在BGW完成之前初始化,而另一组项目在BGW完成之前无法更新,则执行第一组并停止。然后让
RunWorkerCompleted
处理程序执行其更新和所有其他更新。所以它看起来像:

FormLoad()
    start background worker
    do first group of updates

RunWorkerCompletedHandler()
    update from BGW calculation
    do rest of updates

BackgroundWorkers不会让事情进展得更快,他们只是提供了一种在不阻塞GUI的情况下运行代码的方法。也就是说,听起来您仍然在运行阻止GUI的代码,因为您正在等待UI线程完成。你必须发布一些代码。