当前位置:编程学习 > C#/ASP.NET >>

执行中的程序如何由用户中断

求教各位大大
比如一个文件内容搜索工具,当只检索到一半文件的时候,用户就看到了想要的文件,这时想通过点击画面上的按钮或者按Esc键的类似操作来中断运行中的画面。
有个初步想法是,设一个全局布尔型变量,每检索一条数据之前都判断一下,False的话就跳出循环。
在另外的事件里面改变这个变量达到终止运行的目的
不知道有没有其他更好的方法。
另外,每检索到一条数据,想反映到画面上的时候都必须使用Application.DoEvent方法么?这样貌似会影响效率。 搜索 中断 程序 --------------------编程问答-------------------- 可以通过信号量、消息代替那个“全局bool变量”,但是本质上来说,原理是差不多的,只是线程安全而已。 --------------------编程问答-------------------- 搞俩线程,一个监控,一个执行。监控发现问题了,就把另外一个停下来。 --------------------编程问答-------------------- 当然你也可以在外部强行掐掉线程,不过这很暴力。

或者用一些技巧,让停止的逻辑放在调用者那里。比如使用迭代器模式等等,但是这只是让代码更优雅一些,原理还是那个原理。 --------------------编程问答--------------------
引用 2 楼 nonary 的回复:
搞俩线程,一个监控,一个执行。监控发现问题了,就把另外一个停下来。

菜鸟没写过多线程的。。这个是不是会增加很多代码量? --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
当然你也可以在外部强行掐掉线程,不过这很暴力。

或者用一些技巧,让停止的逻辑放在调用者那里。比如使用迭代器模式等等,但是这只是让代码更优雅一些,原理还是那个原理。

这种需求的话还是写多线程的会合适一些么? --------------------编程问答-------------------- 多线程可以有效防止UI线程挂起,失去响应。 --------------------编程问答-------------------- 你用doevents是没有办法解决阻塞的函数调用的问题的,比如

for (int i = 1; i < 10; i++)
{
    Application.DoEvents();
    LongTimeCalc(); // 假设这个方法需要1分钟才能返回。
}

这种程序加上doevents也没有什么用。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,