加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 如安在靠山最好地执行查询以不冻结应用措施(.NET)

发布时间:2021-01-12 10:53:56 所属栏目:编程 来源:网络整理
导读:我的WinForm应用措施必要执行具有大量执行时刻的伟大查询,我没有影响力(约莫10分钟) 当查询正在执行时,用户在使命打点器中看到“应用措施没有相应”,这对用户来嗣魅真的很紊乱,也不是很专业…… 我信托查询应该在差异的线程中执行.实行过一些要领但很难让它真正

我的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变量volatile

编辑:
假如您但愿UI从靠山线程守候,我凡是会这样做:

>启动靠山线程
>在UI中启动一些进度条
>禁用一些控件(如按钮等)以停止用户在靠山线程事变时单击它们(譬喻:假如您在用户单击按钮时执行线程,则应禁用该按钮,不然多次查询将在统一时刻呈现).

完成线程后,您可以遏制进度条并再次启用控件.

怎么知道线程何时完成?您可以行使变乱.只需建设一个变乱并在它完成时触发它,并在变乱处理赏罚措施中做任何你想做的工作……

确保您从靠山线程正确会见UI控件,不然会堕落.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读