C# 暂停循环,直到下载事件完成
如何暂停someRandomMethod()中的循环,直到DownloadCompleted()中的代码执行完毕?下面的代码仅解压缩版本数组中的最新版本。这就像循环比第一次下载要快,并且m_CurrentlyDownloading在第一次执行DownloadCompleted()时具有最新的值C# 暂停循环,直到下载事件完成,c#,C#,如何暂停someRandomMethod()中的循环,直到DownloadCompleted()中的代码执行完毕?下面的代码仅解压缩版本数组中的最新版本。这就像循环比第一次下载要快,并且m_CurrentlyDownloading在第一次执行DownloadCompleted()时具有最新的值 private void someRandomMethod() { for (int i = 0; i < versions.Count; i++) { //Clea
private void someRandomMethod() {
for (int i = 0; i < versions.Count; i++)
{
//ClearInstallFolder();
m_CurrentlyDownloading = versions.ElementAt(i);
Download(versions.ElementAt(i));
LocalUpdate(versions.ElementAt(i));
System.Threading.Thread.Sleep(500);
}
}
private void Download(string p_Version)
{
string file = p_Version + ".zip";
string url = @"http://192.168.56.5/" + file;
//client is global in the class
client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
client.DownloadFileAsync(new Uri(url), @"C:\tmp\" + file);
}
private void DownloadCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Error == null)
{
Unpack(m_CurrentlyDownloading);
if (GetInstalledVersion() == GetLatestVersion())
ClearZipFiles();
}
else
MessageBox.Show(e.Error.ToString());
}
private void方法(){
for(int i=0;i
类似的东西可以用来等待
使其成为类属性
bool IsDownloadCompleted=false;
将此添加到下载完成事件中
IsDownloadCompleted=true;
这是你想要停止循环的地方
while(DownloadCompleted!=true)
{
Application.DoEvents();
}
像这样的东西可以用来等待 使其成为类属性
bool IsDownloadCompleted=false;
将此添加到下载完成事件中
IsDownloadCompleted=true;
这是你想要停止循环的地方
while(DownloadCompleted!=true)
{
Application.DoEvents();
}
像这样的东西可以用来等待 使其成为类属性
bool IsDownloadCompleted=false;
将此添加到下载完成事件中
IsDownloadCompleted=true;
这是你想要停止循环的地方
while(DownloadCompleted!=true)
{
Application.DoEvents();
}
像这样的东西可以用来等待 使其成为类属性
bool IsDownloadCompleted=false;
将此添加到下载完成事件中
IsDownloadCompleted=true;
这是你想要停止循环的地方
while(DownloadCompleted!=true)
{
Application.DoEvents();
}
最简单的方法是不要使用
*async
方法。正常下载文件将暂停执行,直到完成
但是如果你有权访问wait关键字,试试这个
private async Task Download(string p_Version)
{
string file = p_Version + ".zip";
string url = @"http://192.168.56.5/" + file;
//client is global in the class
client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
await client.DownloadFileAsync(new Uri(url), @"C:\tmp\" + file);
}
最简单的方法是不要使用
*async
方法。正常下载文件将暂停执行,直到完成
但是如果你有权访问wait关键字,试试这个
private async Task Download(string p_Version)
{
string file = p_Version + ".zip";
string url = @"http://192.168.56.5/" + file;
//client is global in the class
client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
await client.DownloadFileAsync(new Uri(url), @"C:\tmp\" + file);
}
最简单的方法是不要使用
*async
方法。正常下载文件将暂停执行,直到完成
但是如果你有权访问wait关键字,试试这个
private async Task Download(string p_Version)
{
string file = p_Version + ".zip";
string url = @"http://192.168.56.5/" + file;
//client is global in the class
client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
await client.DownloadFileAsync(new Uri(url), @"C:\tmp\" + file);
}
最简单的方法是不要使用
*async
方法。正常下载文件将暂停执行,直到完成
但是如果你有权访问wait关键字,试试这个
private async Task Download(string p_Version)
{
string file = p_Version + ".zip";
string url = @"http://192.168.56.5/" + file;
//client is global in the class
client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(DownloadCompleted);
client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressChanged);
await client.DownloadFileAsync(new Uri(url), @"C:\tmp\" + file);
}
创建一些布尔变量,创建一个委托并为此变量获取\设置方法。 然后在循环中使smth像:
while(!isDownLoadCompleted)Thread.Sleep(1024);
创建一些布尔变量,创建一个委托并为此变量获取\设置方法。 然后在循环中使smth像:
while(!isDownLoadCompleted)Thread.Sleep(1024);
创建一些布尔变量,创建一个委托并为此变量获取\设置方法。 然后在循环中使smth像:
while(!isDownLoadCompleted)Thread.Sleep(1024);
创建一些布尔变量,创建一个委托并为此变量获取\设置方法。 然后在循环中使smth像:
while(!isDownLoadCompleted)Thread.Sleep(1024);
您可以使用Paralel.ForEach。此循环将等待所有线程完成。 查看此处了解如何使用: 或
您可以使用Paralel.ForEach。此循环将等待所有线程完成。 查看此处了解如何使用: 或
您可以使用Paralel.ForEach。此循环将等待所有线程完成。 查看此处了解如何使用: 或
您可以使用Paralel.ForEach。此循环将等待所有线程完成。 查看此处了解如何使用: 或
如果首先需要同步API,为什么要使用异步API?o如果首先需要同步API,为什么要使用异步API?o如果首先需要同步API,为什么要使用异步API?o如果首先需要同步API,为什么要使用异步API?这就是路。或者使用AutoResetEvent并将其设置为下载完成,以获得您的答案!我无法使用此选项,我得到了“找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?”(我针对的是4.0)。但是,您提到我不应该使用*异步方法。有其他选择吗?:)尝试
client.DownloadFile(新的Uri(url),@“C:\tmp\”+文件)代码>泰,你会被录取的,先生!非异步的CompletedEventhandler的名称是什么?找不到关于它的任何信息:对于非异步代码,您不需要CompletedEventHandler,因为下一行代码在完成之前不会执行-只需在下一行中自己调用事件处理程序即可。这就是方法。或者使用AutoResetEvent并将其设置为下载完成,以获得您的答案!我无法使用此选项,我得到了“找不到'async'修饰符所需的所有类型。您是针对错误的框架版本,还是缺少对程序集的引用?”(我针对的是4.0)。但是,您提到我不应该使用*异步方法。有其他选择吗?:)尝试client.DownloadFile(新的Uri(url),@“C:\tmp\”+文件)代码>泰,你会被录取的,先生!非异步的CompletedEventhandler的名称是什么?找不到关于它的任何信息:对于非异步代码,您不需要CompletedEventHandler,因为下一行代码在完成之前不会执行-只需在下一行中自己调用事件处理程序即可。这就是方法。或者使用AutoResetEvent并将其设置为下载完成,以获得您的答案!我不能使用这个,我得到“找不到所有类型所需的th”