慢慢装载表格

时间:2009-05-22 16:05:04

标签: c# .net

我一直在编写C#.NET应用程序。我正在使用WinForms。 所以,我有一些表单加载速度非常慢,特别是因为他们从一些XML文件中获取一些数据并在ListBox控件中显示它们。

我要问的是:如何让表单加载速度更快。或者如何继续显示旋转轮的图像(等待软件完成操作时通常看到的图像)。

感谢。

6 个答案:

答案 0 :(得分:10)

查看BackgroundWorker class它允许您在后台线程中启动任务(在您的情况下读取XML文件)并在任务完成时触发表单上的回调。这使您的UI线程可以自由执行有用的操作(注册取消点击)或显示加载图形。

后台工作者还支持实现进度回调的可能性,以便您的UI可以告知用户他们需要等待多长时间。

快速Google搜索会弹出this article,这似乎涵盖了基础知识。

答案 1 :(得分:6)

当您向ListBox添加许多项目时,请务必调用

lst.BeginUpdate();

开始添加项目之前,

lst.EndUpdate();

添加完所有项目后。

答案 2 :(得分:4)

要显示旋转滚轮,如果您正在使用System.Windows.Forms,请查看Cursor类。

例如,我创建了一个这样的类:

class WaitCursor : IDisposable
{
    Cursor m_previous;

    internal WaitCursor()
    {
        m_previous = Cursor.Current;
        Cursor.Current = Cursors.WaitCursor;
    }

    #region IDisposable Members

    public void Dispose()
    {
        Cursor.Current = m_previous;
    }

    #endregion
}

我这样使用:

    using (WaitCursor waitCursor = new WaitCursor())
    {
        //... any statements here, which take a long time ...
    }

答案 3 :(得分:1)

  • 将长时间运行的代码放在BackgroundWorker中,将工作卸载到一个单独的线程中,并保持UI响应。
  • 从窗体的Shown事件(而不是构造函数)调用BackgroundWorker。
  • 可选择处理BackgroundWorker的ProgressChanged事件,以便在加载数据时逐步更新UI。
  • 启动BackgroundWorker后设置UseWaitCursor = true和Enabled = false,并在BackgroundWorker的Complete事件中还原它们。

答案 4 :(得分:0)

另外,您可以在初始化时将光标更改为等待光标并在结束时返回标准以让用户知道正在发生的事情,但最好使用线程以便(主窗体?)不锁定。没有什么说“我冻结”就像一个锁定的主屏幕。如果它是一个主要形式,可能是一个闪烁的屏幕,上面写着“正在加载...”或其他东西。

答案 5 :(得分:0)

如果您正在使用XmlSerializer,您应该知道,因为在运行时创建并编译了每种类型的自定义XmlSerializer,它可能会导致性能问题(尽管只要您的应用程序正在运行,它就会为每种类型创建和编译一次)