我已经使用DevExpress XtraTreeList创建了一个UserControl。基本上,在这个用户控件中,我使用的是库存物品。有三万多个。现在,当我在类型化的DataSet中加载完整的表时,几乎需要6-8秒。
构建用户控件的目的是为了可重用性。这样我们就可以在应用程序的其他部分使用它。
现在我在Winform中使用这个UserControl,这个用户控件放在窗体的左侧,在那里它将用作菜单。假设用户通过展开节点来单击其所需的项目,并且当选择节点时,将获取其进一步的详细信息并将其显示在from中。到目前一切尚好。
现在真正的问题是,在与其他控件相同的表单中,我们有一个Devexpress XtraButtonEdit(使用一个文本框和右手边的一个按钮构建)。此buttonEdit在其文本框中显示当前选定的项(来自treeMenu UserControl)代码,当我们单击buttonEdit按钮时,我们将加载另一个表单作为模型并显示相同的UserControl (来自DevEpress的XTRATreeList)。唯一的问题是,当我将这个新表单作为模型加载时。这棵树再次需要时间来加载,这看起来有点笨拙。
为了纠正这个问题,我试图实现后台工作线程,但我有点困惑,我应该在哪里实现那个backgroundWork。在用户控件或窗体中。
如果我在UserControl中实现了Background worder,那么如何访问这个BackgroundWorker线程并在主窗体上执行它呢?在主窗体中,我将左侧UserControl用作菜单。实际上,我想要的是当用户单击ButtonEdit控件并加载表单时,它应该像flash或2 sec....please帮助中的最大值一样加载。并执行它。
我希望大家能理解我的问题。
如果有人发现任何困难,请让我知道……
致以敬意,
发布于 2010-11-10 05:13:49
你不必“访问这个BackgroundWorker线程并在主窗体上执行它”。
用户控件可以包含自己的Bgw。您需要一个同步方法(在UC上)来启动它。然后在UC中处理已完成(和可能的进度)事件。
但是数据的加载速度不会更快,你只需要解冻你的主GUI。
发布于 2010-11-10 05:13:20
如果延迟是在加载树的代码中造成的,那么您应该“线程”该部分。我推荐阅读C#中的示例章节,简单地说就是:http://www.albahari.com/threading/。它们涵盖了C# 4.0,但是如果您正在使用C# 3.0,那么您应该能够将大多数概念应用于它。
https://stackoverflow.com/questions/4138656
复制相似问题