【问题标题】:freeze app when get data from online sql server [closed]从在线 sql server 获取数据时冻结应用程序 [关闭]
【发布时间】:2017-08-21 19:30:17
【问题描述】:

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

【问题讨论】:

  • 您应该提供一点代码,我们不能只为您猜测解决方案。另外,你试过了吗?也许向我们提供一些您的测试来检查您哪里出错了。

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


【解决方案1】:

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

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

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

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

请向我们展示您如何从数据库中获取数据,我们将为您提供有关如何在不阻塞 UI 的情况下实现它的更多详细信息。

【讨论】:

    【解决方案2】:

    如果没有更多信息,这里是一般建议:

    在线程上执行您的查询(如果是现代的,则使用任务),然后当线程获取它的数据时,它会在主/UI 线程上调用回来。这将防止您的 UI 在查询数据时锁定。

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

    还要确保在您的查询线程中包含一些错误处理,这样如果出现问题,您可以恢复并发出警报(消息框、写入日志,无论您需要做什么)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多