【发布时间】:2019-08-25 16:10:04
【问题描述】:
我正在编写一个下载网页内容的应用程序。问题是,当下载开始时,整个应用程序会冻结,直到下载完成。有没有办法设置超时,在某个时间后停止进程?
【问题讨论】:
标签: c# web-scraping timeout
我正在编写一个下载网页内容的应用程序。问题是,当下载开始时,整个应用程序会冻结,直到下载完成。有没有办法设置超时,在某个时间后停止进程?
【问题讨论】:
标签: c# web-scraping timeout
如果您不希望整个程序冻结,那么您可以在BackgroundWorker 上完成下载,但如果您只是想在给定的时间内运行某个进程然后停止它,您可以使用Process.WaitForExit,并将超时设置为 2 分钟。
2分钟后,如果返回false,则可以使用Process.Kill终止它。
Process process = Process.Start("myDownloadApp.exe");
//wait 2 minutes
if (!process.WaitForExit(120000))
{
process.Kill();
}
【讨论】:
Task.Factory.StartNew 允许您在单独的线程中运行函数。这意味着您可以在后台运行您的函数而不会影响主线程。可能是一个选择...
您可以将它与System.Timers.Timer 一起使用,它允许您在设定的时间后运行一个进程。您将其设置为 2 分钟,如果它仍在运行,则终止该进程。更多信息在这里:https://docs.microsoft.com/en-us/dotnet/api/system.timers.timer?view=netframework-4.8
【讨论】: