在 Windows 窗体窗口中,多个事件可以触发一个异步方法。此方法下载文件并将其缓存。我的问题是我希望该方法执行一次。换句话说,我想防止文件被多次下载。
如果下载文件的方法被触发两次,我希望第二次调用等待文件(或等待第一个方法完成)。
有人知道如何实现吗?
更新:我只是想防止不必要的下载。在我的例子中,当客户端将鼠标放在 ListBox 中的项目上超过几毫秒时,我们开始下载。我们假设用户将单击并请求该文件。可能发生的情况是,用户将鼠标悬停在项目上一秒钟,然后单击。在这种情况下,将开始两次下载。我正在寻找处理这种情况的最佳方法。
更新 2::用户可能会将鼠标移到多个项目上。结果,将发生多次下载。我对这种情况并不是很严格,但现在如果我们遇到这种情况,我们不会放弃下载。文件将被下载(文件通常约为 50-100kb),然后将被缓存。
最佳答案
维护表单变量中正在发生的事情的状态,并让您的异步方法在执行任何操作之前检查该状态。不过,请确保同步访问它!互斥量和信号量很适合这种事情。
如果您可以同时下载不同的文件,则需要在列表中跟踪正在下载的内容以供引用。
如果一次只能下载一个文件,并且您不想排队,您可以在下载某些内容时取消 Hook 事件,并在下载完成时重新 Hook 。
关于c# - C# 的多线程和并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444739/