C#Forms:当初始化需要很长时间时,如何显示表单?
我有一个c#表单,初始化需要一段时间(从服务器获取信息,并填充树视图)。现在,代码看起来与此类似: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>
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在加载屏幕时制作进度条。