在WPF应用程序中,我在 try-catch 结构中使用LINQ to SQL查询来处理异常,以防数据库服务器连接出现问题。
问题是 - 我有一些查询在定时器轮询的基础上执行。因此,如果连接失败,我会进行大量长查询尝试,并且UI正在冻结。
标准出路是什么?我希望有一个简单的轻量级方法来不断检查数据库连接是否正常,然后用我的所有查询做所有的事情。
答案 0 :(得分:5)
在后台工作线程中运行它,或者完全在单独的线程中运行。
不应该在UI线程上完成工作,除非它直接与UI本身相关。 BackgroundWorker是一个使这样的线程非常简单的对象。有关教程,请参阅this entry。它解释了后台工作人员的工作以及如何使用它。
如果您在UI线程上工作,那么您将从UI中窃取CPU周期,从而导致用户感觉很慢。在它自己的线程上运行工作,然后更新UI是最好的方法。这样,用户可以做其他事情并且UI正确响应。
答案 1 :(得分:3)
为什么不将轮询查询移动到自己的线程上,这样他们就不会冻结UI?然后,他们可以向您的主UI线程发送消息或事件,您可以在那里处理它(弹出错误消息等)。