c#窗体:如何在初始化需要很长时间时显示窗体

本文关键字:窗体 长时间 显示 初始化 | 更新日期: 2023-09-27 18:05:35

我有一个c#表单,初始化时间需要一段时间(它从服务器获取信息,并填充一个TreeView)。现在,代码看起来像这样:

public class myForm : Form
{
    InitializeComponent();
    List<Location> locations = getServerLocations(); // Server call
    foreach( Location loc in locations )
    {
        List<POI> POIs = loc.getLocationPOIs(); // Server call
        foreach( POI poi in POIs ) 
        {
             List<POIDetails> = poi.getPOIDetails(); // Server call
             ....
        }
    }
}
你懂的,我想…所以有一个很大的树,我知道我不能一直向下调用直到用户展开树。但我的意图是,我只是想显示的形式,与'loading…’或者在所有的处理和服务器操作都在进行的时候在工具条上做些什么。

现在,看起来好像我还没有加载应用程序,因为在所有调用完成之前什么也不会显示给用户。

c#窗体:如何在初始化需要很长时间时显示窗体

你不应该在UI线程上做任何长时间运行的处理-而是将其移动到另一个线程,即使用BackgroundWorker。你可以首先显示"Loading"屏幕,一旦后台工作器完成,用树形结构更新你的UI。

您应该使用多线程进程,这样您就可以将占用时间的进程与其他进程分开。. net 4.0和System.Threading.Tasks

在单独的线程上运行初始化是首选的方法。但是,如果你被限制在UI线程上运行它,那么尝试在调用窗体的。show()或。showdialog()之后调用Application.DoEvents()。

如果表单出现,在初始化完成之前,它仍然对用户操作没有响应。因此在单独的线程上运行初始化是更好的解决方案。