gpt4 book ai didi

c# - 表单完全可见后如何正确加载 DataGridView?

转载 作者:行者123 更新时间:2023-11-29 12:44:24 24 4
gpt4 key购买 nike

我有 2 个表格。在第一个表单中,我输入信息,第二个表单作为帮助程序来获取第一个表单的代码(与 ShowDialog() 方法一起使用)。由于在第二种形式中检索到的信息来自远程访问的数据库,有时需要几秒钟的时间,所以我所做的是将信息加载到 DataGridView 中的冗长方法移动到BackgroundWorker ,DoWork中的代码为:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
this.Invoke((MethodInvoker)delegate
{
//Method to retrieve records
});

}

并在表单的 Shown() 方法中启动它。现在,我的问题是,第一次创建表单实例时它工作得很好,但从第一次开始它就显示如下:

enter image description here

如何解决这个问题?

最佳答案

首先阅读有关您使用的类型的文档:

You must be careful not to manipulate any user-interface objects in your DoWork event handler. Instead, communicate to the user interface through the ProgressChanged and RunWorkerCompleted events.Source

由于 this.Invoke(... ,您基本上是在 UI 线程上从数据库中获取所有数据,这就是您的表单不会重新绘制的原因。

为了解决此问题:

  1. DoWork 事件处理程序中删除 this.Invoke 以及访问 UI 控件的任何其他代码。在该处理程序中,您只想从数据库中获取记录,而不更新任何 UI。

  2. 将您的 UI 更新代码移至 RunWorkerCompleted事件处理程序。

  3. 最后但并非最不重要的一点是,您可能不希望在表单的 Shown 事件上开始加载数据,而是在 Form.Load 上开始加载数据。 ,因为it precedes the Shown并在表单显示之前引发。

关于c# - 表单完全可见后如何正确加载 DataGridView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25658405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com