Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在表单加载中加载数据表,如何在c中加快加载速度#_C#_.net_Database_Winforms_.net 3.5 - Fatal编程技术网

C# 在表单加载中加载数据表,如何在c中加快加载速度#

C# 在表单加载中加载数据表,如何在c中加快加载速度#,c#,.net,database,winforms,.net-3.5,C#,.net,Database,Winforms,.net 3.5,我有一个c#windows窗体,当它打开时加载数千条记录以填充数据表,问题是当我单击窗体时,它会在显示所有数据之前显示一个空白窗口一段时间,所以 如何在加载数据时在datagridview上显示等待符号,并让窗体的其他控件可见 如何加快速度如果它能完成任务,我已经准备好执行线程处理。你应该使用类。你完全可以使用线程处理。它基本上包括启动另一个线程来查询数据库,同时向用户显示一些加载消息 以下是一些文档: 还有一些代码示例: Thread t = new Thread(new ThreadSta

我有一个c#windows窗体,当它打开时加载数千条记录以填充数据表,问题是当我单击窗体时,它会在显示所有数据之前显示一个空白窗口一段时间,所以

如何在加载数据时在datagridview上显示等待符号,并让窗体的其他控件可见


如何加快速度如果它能完成任务,我已经准备好执行线程处理。

你应该使用类。

你完全可以使用线程处理。它基本上包括启动另一个线程来查询数据库,同时向用户显示一些加载消息

以下是一些文档:

还有一些代码示例:

Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();
其中ThreadProc应该是您的数据加载方法

让我再澄清一点:


您的数据加载方法应该只查询数据库并返回到主线程,正如注释中指出的,您不能与来自另一个线程的UI元素交互。

使用backgroundworker组件。它比单独使用线程更容易处理 或者,您可以使用ado.net提供的异步方法,如beginexecutereader等,您可以将其与部分结果结合使用


如果您的数据库系统不支持MySQL中常见的LIMIT子句来指定部分结果,您可以使用类似的方法。

您需要一个后台线程。您可以在表单中设置BackgroundWorker,或者在事件处理程序中设置一个带有BeginInvoke的基本异步模型,完成后将提供另一个方法作为其回调。在后台工作程序中,执行所有数据检索,然后在需要实际填充DGV时调用回主线程(一旦信息都在内存中,这将花费更少的时间)


问题是,当主线程忙于等待DB返回所有行时,系统无法响应任何其他用户输入或Windows消息(例如“重画您自己”)。Windows将看到该应用程序的消息队列正在备份,并将该应用程序标记为“无响应”。不是很愉快的用户体验。

使用jQuery是一种选择吗?您可以使用jQuery完成所有这一切(异步加载表和加载程序映像)。如果只需要一个选项,您可以使用pageddatasource@Ivo,它是winforms,不是html/web,所以没有jQuery。@伊沃:很抱歉,在我“自己”的世界里,pagedatasource仍然是一个选项,我想你正在对DataGridView进行格式化吗?通常,从后端获取数千条记录应该在不到一秒钟的时间内完成。但是,如果要更新表单上的控件,则需要小心,因为您的线程无法与UI对话thread@Hammerstein很好的指出,我已经编辑了答案,包括这一点。