我有一系列表格并在它们之间导航。
每个表单都有一组控件,我从SQLite数据库加载属性,这是长(约1s)操作,不会给用户最好的感觉,因为表单正逐渐被绘制。
我不介意延迟,但我希望在加载所有数据时绘制表单。我想避免使用新线程,因为这会导致跨线程操作问题。
除了通过缓存加载的数据来加速整个应用程序之外,还有什么好的解决方案吗?
答案 0 :(得分:5)
有一种简单的方法可以加快许多控件的感知性能,尤其是列表视图,列表框,组合框等数据密集型控件。
在填充它们之前,请调用BeginUpdate()方法,完成后调用EndUpdate()。这会禁用重绘控件,直到您用数据填充它为止。
答案 1 :(得分:2)
对不起。这就是线程的用途。 “跨线程操作问题”已明确定义,并且存在处理它们的常见模式。只需将线程交互的位置减少到最小(在这种情况下,它将是一个单独的位置 - 在加载数据之后)并且它变得微不足道。
还有一些类使winforms应用程序中的多线程变得更容易,因为它们抽象出了线程之间的交互。 BackgroundWorker(关于它的博客文章的链接)将为您执行另一个线程的工作,并通过在UI线程上触发事件来通知您。您可以获得多线程的好处,而不会有任何陷阱。
答案 2 :(得分:1)
我发现加载Winform控件(如组合框和列表框)在指向Views而不是表本身时加载速度要快得多,特别是如果你可以将视图限制为与控件相比更加精简翻阅整个表格。
答案 3 :(得分:0)
回到VB时,我使用了LockWindowUpdate API。由于这需要一个窗口句柄,它也应该可以与WinForms一起使用。虽然,从未尝试过。
答案 4 :(得分:0)
这个链接有一些很好的解决方案,据我认为BackgroundWorker流程应该有所帮助。 http://devcomponents.com/blog/?p=361