1

我在 windows 窗体上有一个网格,需要在窗体加载时填充。数据来自数据库。目前我在表单 onload 中调用 LoadData()。因此,由于有数据库调用,加载屏幕需要相当长的时间。

这是一个好方法吗?我不能使用后台工作程序并异步调用 LoadData() 以便加载窗口不会有任何延迟吗?

有人可以解释一下最好的方法是什么吗?

4

3 回答 3

0

您可以简单地使用 Dispatcher 在表单呈现后异步加载数据

        /// <summary>
        /// Handles the Loaded event of the Window control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new LoadDataDelegate(LoadData));
        }

        private delegate void LoadDataDelegate();

        /// <summary>
        /// Loads the data.
        /// </summary>
        private void LoadData()
        {
            List<string> numberDescriptions = new List<string>();
            for (int i = 1; i <= 10000000; i++)
            {

                numberDescriptions.Add("Number " + i.ToString());
            }
            listBox1.ItemsSource = numberDescriptions;
        }
于 2013-09-11T06:39:37.183 回答
0

在表单加载时从数据库同步加载数据不是一个好方法,您应该在单独的线程上异步加载它。

您可以使用以下任一方式:

  1. 线程类
  2. 后台工作者
于 2013-04-21T10:15:26.163 回答
0

备注:

  1. 查询优化和索引搜索跟踪表
  2. 数据网格是复杂的对象,并且有时间更新和填充它的普通对象(特别是当有更多列时)
  3. 您必须考虑的系统硬件(Ram、CPU、VGA、...)
  4. 我认为最好的方法是对您的查询结果进行排序并按访问的最后代码分页您的结果并使用它:

    void NextPage()
    {
    Qr="select Top N from tbl where Code>LastCode order by Code asc";
    //读取数据
    FirstCode=Drr["Code"];//对于第一条记录结果
    LastCode=Drr["Code"];//对于最后一条记录结果
    }
    void PreviousPage()
    {
    Qr="select Top N from tbl where Code < FirstCode order by Code asc";

    //读取数据

    FirstCode=Drr["Code"];//为第一次记录结果
    LastCode=Drr["Code"];//为最后一次记录结果
    }

希望这个帮助

于 2013-04-21T10:19:44.843 回答