2011-08-11 52 views
2

我需要能够在Windows窗体中轻松创建异步UI。我正在考虑创建允许其他控件托管在那里的自定义容器控件。然后,在运行应用程序时,该控件将显示进度栏,除非其他控件已被填充/初始化。然后,工作完成后,将显示这些控件并隐藏进度栏。如何创建异步控制包装?

任何建议如何实现?

+0

你应该提供一些关于你想要做的更多细节。 – agibalov

回答

2

您可以使用面板类作为您的出发点。只是从它继承。

您将需要在面板顶部或第一个成员加载进度条。如果您不想更新进度条,可以使用选取框样式;否则,可以在向面板添加控件时增加进度条。

如果您使用选取框样式,那么您已经完成了很多工作。如果你想要一个实际的进度条从0到100%填满,你将需要一些额外的幻想。

以下是棘手的部分:UI组件更新必须在UI线程中运行。但是你不能在UI线程中运行所有的东西,因为UI线程在添加控件之前不会处理事件(比如更新进度条)。

您需要的是一种方法,负责将控件添加到面板,以便您可以在发生UI时更新UI。有很多方法可以做到这一点;最简单的方法可以这样做:

Thread thread = new Thread(MyControlAddingMethod); 
thread.Start(); 

您的控件添加方法将需要封送UI方法调用到UI线程。这是如何:

void MyControlAddingMethod() 
{ 
    myPanel.BeginInvoke(m => { myPanel.Controls.Add(myControl); ++myProgressBar.Value;}); 
    //or 
    myPanel.BeginInvoke(MyFunctionThatDoesTheSameAsTheLambdaStatementAbove); 
} 
+0

谢谢,就是这样! – agibalov