2010-11-09 69 views
1

我已经使用DevExpress XtraTreeList创建了一个UserControl。基本上在这个用户控件中,我正在使用库存项目。超过3万。现在,当我在我的类型化数据集中加载完整的表时,需要将近6-8秒。在哪里实现BackgroundWorker。 Winforms c#

构建用户控件的目的是重用性。这样我们就可以在应用程序的其他部分使用它。

现在我在Winform中使用此用户控件,其中此用户控件位于将用作菜单的窗体的左侧。用户假设通过展开节点来点击其所需的项目,并且当节点被选择时,其更多细节将被获取并将被显示在from中。到现在为止还挺好。

现在的实际问题是,在与其他控件相同的表单中,我们有一个Devexpress XtraButtonEdit(使用右侧的文本框和按钮构建)。这个buttonEdit在它的文本框中显示当前选中的项目(来自treeMenu UserControl)代码,当我们点击buttonEdit按钮时,我们将另一个表单作为模型加载并显示相同的UserControl(来自DevEpress的XTRATreeList)。唯一的问题是,当我将这种新形式作为模型的时候。树再次需要时间来加载,看起来有点尴尬。

为了纠正这个问题,我试图实现后台工作线程,但有点困惑,我应该在哪里实现该背景工作。在用户控件或表单中。

如果我在UserControl中实现了后台工作者,那么我怎样才能访问这个BackgroundWorker线程并在主窗体上执行它,我在左侧使用UserControl作为Menu。其实我想要的是,当用户点击ButtonEdit控件和窗体加载时,它应该在2秒内像flash或max一样加载....请帮助....并执行它。

我希望人际交往能理解我的问题。

如果有人发现有任何困难PLZ让我知道....

问候,

+0

呃,没关系。花了一个小时才能找到干草堆里的针。解决她的问题也解决了你的问题。 – 2010-11-09 21:22:08

+0

汉斯,伙伴我不理解你的评论,你能解释一下吗? – Shax 2010-11-10 09:18:18

回答

2

您不必“访问此BackgroundWorker线程并在主窗体上执行它”。

用户控件可能包含自己的Bgw。你需要一个同步方法(在UC上)来启动它。然后处理UC内完成的(和mayb进展)事件。

但是数据不会加载得更快,你只能解冻你的主GUI。

+1

以上关键部分:*处理UC *内完成的(和mayb进展)事件。即使你使用BW,也要确保在UI线程上只进行UI工作。如果它是永久加载的UI本身,则使用理解分页或分批分割UI访问的控件。 – 2010-11-09 21:52:58

1

如果延迟在加载树的代码引起的,那么你就应该“线程”的一部分。我建议阅读C#中的这个样例章:http://www.albahari.com/threading/。它们涵盖了C#4.0,但是如果你正在使用的是C#3.0,你应该能够将大部分概念应用到C#3.0中。