gpt4 book ai didi

c# - 在控制台应用程序中等待异步操作结束时,如何避免出现 Thread.Sleep(Int32.MaxValue)?

转载 作者:太空宇宙 更新时间:2023-11-03 17:44:43 24 4
gpt4 key购买 nike

我有以下代码可以将文件异步下载到我的硬盘驱动器,向控制台大喊当前进度并在最后以一条再见消息退出:

webClient.DownloadProgressChanged.Add(fun args ->
if (currentPercentage < args.ProgressPercentage) then
Console.WriteLine(args.ProgressPercentage.ToString() + "%")

currentPercentage <- args.ProgressPercentage
)

webClient.DownloadFileCompleted.Add(fun args ->
Console.WriteLine("Download finished!")
Environment.Exit 0
)

webClient.DownloadFileAsync(new Uri(url_to_download), file_name)

Thread.Sleep Int32.MaxValue

不过,我想知道是否可以有更优雅的方式来实现这一点,而不必在主线程中诉诸“永远休眠”,让程序通过 Environment.Exit() 结束。 .我对使用 Environment.Exit() 没有偏见但如果可能的话,我想避免它!我能想到的避免这种情况的唯一方法是生成一个新线程,然后等待它结束,但这看起来确实很麻烦。有没有更简单的方法来完成这个?

最佳答案

您可以像这样使用 ResetEvent:

webClient.DownloadProgressChanged += (f,a) => ...
AutoResetEvent resetEvent = new AutoResetEvent(false);
webClient.DownloadFileCompleted += (f, a) => resetEvent.Set();
webClient.DownloadDataAsync(new Uri(url_to_download), file_name);
resetEvent.WaitOne();
Console.WriteLine("Finished");

关于c# - 在控制台应用程序中等待异步操作结束时,如何避免出现 Thread.Sleep(Int32.MaxValue)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7134864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com