当用户点击其列表中可用的其中一个可用项目(模块)时,我将使用以下代码创建所选项目的新实例(用户控件),然后将其添加到我的tabGroupArea。
object uc = Activator.CreateInstance(Type.GetType("myNamespace." + selectedItem.Parameter1Value), selectedItem);
Infragistics.Windows.DockManager.ContentPane contentPane = new Infragistics.Windows.DockManager.ContentPane();
contentPane.Content = uc;
tabGroupArea.Items.Add(contentPane);
我遇到的问题是当selectedItem里面有usercontrols时,initializeComponent()将需要一段时间才能完成,同时应用程序将冻结,用户无法做任何事情,我尝试了不同的方式来放
object uc = Activator.CreateInstance(Type.GetType("myNamespace." + selectedItem.Parameter1Value), selectedItem);
在一个单独的线程(Backgroundworker,thread和delegate)中,所以我可以向用户显示一个loadin页面。但我无论如何都找不到。 任何帮助,将不胜感激 。 感谢。
答案 0 :(得分:2)
请参阅this blog post。
Catel将此方法用于PleaseWaitWindow。
答案 1 :(得分:0)
下面的代码是这样的:
public partial class Window1 : Window
{
public delegate void CreateCanvasHandler(Grid parent, int index);
public Window1()
{
InitializeComponent();
int count = 10000;
this.TestCreateAsync(count);
}
private void TestCreateAsync(int count)
{
for (int i = 0; i < count; i++)
{
//check the DispatecherOperation status
this.LayoutRoot.Dispatcher.BeginInvoke(new CreateCanvasHandler(this.CreateCanvas),
DispatcherPriority.Background,
new object[2]
{
this.LayoutRoot,
i
});
}
}
private void CreateCanvas(Grid parent,
int index)
{
Canvas canvas = new Canvas()
{
Width = 200,
Height = 100
};
canvas.Children.Add(new TextBlock()
{
Text = index.ToString(),
FontSize = 14,
Foreground = Brushes.Black
});
Thread.Sleep(100);
parent.Children.Add(canvas);
}
}