gpt4 book ai didi

C# : Blocking a function call until condition met

转载 作者:可可西里 更新时间:2023-11-01 08:17:13 29 4
gpt4 key购买 nike

我正在开发一个 C# Winforms 应用程序,应用程序的一部分将使用 AsyncUpload 将文件上传到网络服务器(使用它,由于需要使用 porgress 回调),在 C# 程序中

我有一个调用上传函数的简单 for 循环

 for(int i=0;i < 10 ; i++)
{
Uploadfun();
}

有趣的是有一些魔力:

Uploadfun()
{
// Logic comes here

// webClient.UploadFileAsync runs a 2nd thread to perform upload ..
webClient.UploadFileAsync(uri, "PUT", fileNameOnHD);

}

异步上传完成时调用的回调

Upload_Completed_callback()
{
//Callback event
}

编辑

逻辑顺序:

  1. Fun 被调用(从循环中)
  2. 执行并完成有趣的逻辑..
  3. 回到for循环
  4. 当 UploadFileAsync(正在另一个线程中运行某些逻辑)结束时,最终将调用回调

问题在第 3 点,当执行回到 for 循环时,我需要阻止循环继续,直到回调被调用。

最佳答案

因此,如果我理解正确的话,您想调用 UploadFileAsync 然后阻塞,直到异步调用触发您的回调。如果是这样,我会使用 AutoResetEvent

private readonly AutoResetEvent _signal = new AutoResetEvent(false); 

fun()
{
// Logic comes here

// runs a 2nd thread to perform upload .. calling "callback()" when done
webClient.UploadFileAsync(uri, "PUT", fileNameOnHD);

_signal.WaitOne(); // wait for the async call to complete and hit the callback
}



callback()
{
//Callback event
_signal.Set(); // signal that the async upload completed
}

使用 AutoResetEvent 意味着在调用 Set 并且等待线程通过 WaitOne 接收信号后状态会自动重置

关于C# : Blocking a function call until condition met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2213783/

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