从在线sql server获取数据时冻结app

时间:2017-03-28 15:57:44

标签: c# mysql sql-server sql-server-2008 freeze

我使用sql server的应用程序位于服务器上。我的问题是在使用这个应用程序时,从服务器获取数据时冻结应用程序! 你提出的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

听起来您正在从UI线程执行数据库查询。也许,查询是在按钮“点击”动作处理程序中执行的?

UI线程是一个运行UI消息循环并处理UI事件的线程(如按钮点击,窗口调整大小等)。如果在UI线程中执行长时间运行的任务,它将阻止在任务完成之前处理所有其他UI消息。因此,UI看起来会被冻结。

数据库调用相当慢,在UI线程之外执行它们是个好主意。一种解决方案是旋转一个新线程,提供一个在完成查询执行后调用的回调方法。

更好的方法是使用async / await。您必须定义执行数据库调用的异步方法。然后在UI线程中等待该方法。

请告诉我们您如何从数据库中获取数据,我们将为您提供有关如何在不阻止UI的情况下实施数据的更多详细信息。

答案 1 :(得分:0)

这里没有更多信息的一般建议:

在一个线程上执行你的查询(如果是现代的话,使用一个Task),然后当线程获取它的数据时,在main / UI线程上重新调用它。这将阻止您的UI在查询数据时锁定。

您可能还想在UI线程上启动某种“微调器”或“加载”指示器,以便用户知道等待并且不会一次又一次地疯狂尝试加载数据。

还要确保在查询线程中包含一些错误处理,这样如果情况变坏,您可以恢复并发出警报(messagebox,写入日志,无论您需要做什么)。