我们有C#应用程序来抓取和执行代码。但是有些时候系统响应因为代码执行时间过长。我们如何在10秒后停止执行代码,应用程序将不再停止响应。
答案 0 :(得分:2)
你必须为程序添加某种方式告诉windows“不,它没有被冻结,它正在工作”,要么通过在另一个线程中进行所有处理和爬行,要么通过做某种形式的通知,如打印每隔几帧。
答案 1 :(得分:2)
解决此问题的方法取决于您设计长时间运行的方式。所以,没有进一步的细节,我只能提供一般性的指示。
如果您的代码需要很长时间才能执行,因为您没有及时从远程系统(即数据库,网站等)获得响应,那么会考虑超时。如果您用于进行远程调用的API不支持超时,请考虑类似CircuitBreaker模式:
http://davybrion.com/blog/2009/07/protecting-your-application-from-remote-problems/ http://timross.wordpress.com/2008/02/10/implementing-the-circuit-breaker-pattern-in-c/
如果只是你的应用程序正在做很多工作,请确保你在UI线程以外的线程上做这项工作,正如Twitch所说,以保持用户界面的响应。
如果你正在使用一个非常长的循环进行内部工作,那么可能值得在该循环中反复检查是否满足取消条件(这可能是从不同线程设置的标志甚至是经过的时间)。这种方法称为合作取消。 .Net 4.0取消框架上的This article提供了一些很好的背景知识,以及它引用的this article。
答案 2 :(得分:0)
您可以调用Application.DoEvents在GUI线程中执行长任务时执行事件。这样它就不会阻止GUI。 你应该考虑在一个线程中运行长任务,因为你可以获得更多的直接控制。