Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Forms:当初始化需要很长时间时,如何显示表单?_C#_Multithreading_Forms_Treeview_Delay - Fatal编程技术网

C#Forms:当初始化需要很长时间时,如何显示表单?

C#Forms:当初始化需要很长时间时,如何显示表单?,c#,multithreading,forms,treeview,delay,C#,Multithreading,Forms,Treeview,Delay,我有一个c#表单,初始化需要一段时间(从服务器获取信息,并填充树视图)。现在,代码看起来与此类似: public class myForm : Form { InitializeComponent(); List<Location> locations = getServerLocations(); // Server call foreach( Location loc in locations ) { List<POI>

我有一个c#表单,初始化需要一段时间(从服务器获取信息,并填充树视图)。现在,代码看起来与此类似:

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
             ....
        }
    }
}
公共类myForm:Form
{
初始化组件();
列表位置=getServerLocations();//服务器调用
foreach(位置中的位置loc)
{
List POIs=loc.getLocationPOIs();//服务器调用
foreach(POI中的POI)
{
List=poi.getPOIDetails();//服务器调用
....
}
}
}
我想你明白了。。。所以有一个很大的树,我知道我不能一直打电话,直到用户扩展树。但目的是我只希望表单显示,在所有处理和服务器都进行时,在工具条上显示“加载…”或其他内容


现在,似乎我还没有加载应用程序,因为在所有调用完成之前,不会向用户显示任何内容。

您不应该在UI线程上执行任何长时间运行的处理,而是将其移动到另一个线程,即使用。您可以首先显示“加载”屏幕,并且在后台工作人员完成后,使用树结构更新您的UI。

您不应该在UI线程上执行任何长时间运行的处理,而是将其移动到另一个线程,即使用树结构。您可以首先显示“加载”屏幕,并且在后台工作人员完成后,使用树状结构更新UI。

您应该使用多线程进程,以便将需要时间的进程与进程的其余部分分开。这里有一个博客可以帮助你

您应该使用多线程进程,以便将需要时间的进程与进程的其余部分分开。这里有一个博客可以帮助你

在单独的线程上运行初始化是首选方法。但是,如果您必须在UI线程上运行它,请尝试在调用窗体的.Show()或.ShowDialog()之后立即调用Application.DoEvents()


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

在单独的线程上运行初始化是首选方法。但是,如果您必须在UI线程上运行它,请尝试在调用窗体的.Show()或.ShowDialog()之后立即调用Application.DoEvents()


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

这是因为您在单个线程中完成所有操作。什么是C形式?你是说Windows窗体吗?这是因为你在一个线程中处理所有事情。什么是C#窗体?你是说Windows窗体吗?如果你感兴趣,你还可以使用BackgroundWorker在加载屏幕时制作进度条。如果你感兴趣,你还可以使用BackgroundWorker在加载屏幕时制作进度条。