sql – 如何在后台最好地执行查询以不冻结应用程序(.NET)
我的WinForm应用程序需要执行具有大量执行时间的复杂查询,我没有影响力(大约10分钟)
我相信查询应该在不同的线程中执行.尝试过一些方法但很难让它真正起作用(执行查询,强制主应用程序等待结果,返回主应用程序,取消执行的可能性等) 我想知道你是否有自己的/良好的工作解决方案.代码示例也非常欢迎:) 另外我相信可能存在一些准备使用的实用程序/框架,允许简单地执行它. 解决方法如果要执行的方法是ExecuteQuery,则可以执行以下操作:void SomeMethod() { var thread = new Thread(ExecuteQuery); thread.Start(); } void ExecuteQuery() { //Build your query here and execute it. } 如果ExecuteQuery收到一些参数,例如: void ExecuteQuery(string query) { //... } 你可以做: var threadStarter = () => { ExecuteQuery("SELECT * FROM [Table]"); }; var thread = new Thread(ThreadStarter); thread.Start(); 如果要停止后台线程的执行,请避免调用thread.Abort()方法.这会杀死线程,你不希望这样,因为你的数据库中可能会出现一些错误. 相反,您可以从ExecuteQuery中看到一个bool变量,当您想要停止它时,可以从外部将其设置为True.然后你要做的就是检查ExecuteQuery中代码的某些部分,如果该变量仍为True.否则,执行一些回滚以保持数据库稳定. 一定要设置bool变量 编辑: >启动后台线程 完成线程后,您可以停止进度条并再次启用控件. 怎么知道线程何时完成?您可以使用事件.只需创建一个事件并在它完成时触发它,并在事件处理程序中做任何你想做的事情…… 确保您从后台线程正确访问UI控件,否则会出错. (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |