我在窗体上有一个网格,需要在表单加载时填充。数据来自数据库。目前我在表单onload中调用LoadData()。因此,在进行数据库调用时,加载屏幕需要相当长的时间。
这是一个好方法吗? 我不能使用后台工作程序并异步调用LoadData(),以便加载窗口时不会有任何延迟吗?
有人可以解释一下最好的方法是什么吗?
答案 0 :(得分:0)
在表单加载时从数据库同步加载数据不是一个好方法,你应该在不同的线程上异步加载它。
您可以使用以下任一方式:
答案 1 :(得分:0)
注意:
我认为最好的方法是对您的查询结果进行排序,并通过访问的最后一个代码对您的结果进行分页并使用它:
void NextPage()
{
Qr =“从代码>按代码asc选择LastCode顺序的tbl中选择前N个”;
//阅读数据
FirstCode = Drr [“Code”]; //用于第一个记录结果
LastCode = Drr [“Code”]; //用于最后记录结果
}
void PreviousPage()
{
Qr =“从Tbl中选择前N个,其中Code< FirstCode order by Code asc”;
//读取数据
FirstCode = Drr [“Code”]; //用于第一个记录结果
LastCode = Drr [“Code”]; //用于最后记录结果
}
希望这个帮助
答案 2 :(得分: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;
}