![](/img/trans.png)
[英]C# Make HttpWebResponse wait until response has been received instead of receiving HTTP 400 Error
[英]How to make c# wait until previous code has been executed?
这可能是一件简单的小事,但我无法弄清楚……我的代码中有一个方法,其中包含一个非常简单的语句:
if (check == 1)
{
labelTest.Text = "Loading, please wait."
retrieveData()
}
在“ retrieveData”方法中,从数据库中检索了大量数据,并填充了一些列表视图。 这需要几秒钟,因此我希望“加载中”文本可见。
但是,当(check == 1)为true时,会发生什么,方法'retrieveData'将执行,然后labelTest.Text更改为“ Loading,Please wait”。
我该怎么做才能使其按正确的顺序运行,因此首先在IF语句中完成第一行,然后移至第二行? 我什至尝试了一个非常肮脏的解决方法(System.Threading.Thread.Sleep(1000)),以便给文本加载一秒钟的时间,但是即使这样也没有用。
通常,如果您使用的是C#5,则需要通过async
:
if (check == 1)
{
labelTest.Text = "Loading, please wait."
// ideally make this an async method:
await retrieveDataAsync();
// if that's not an option:
// await Task.Run(() => retrieveDataAsync());
labelTest.Text = "Done."
}
该代码按您期望的顺序执行,第一个语句在第二个开始之前完成。
但是,第一条语句不会更新标签的显示,它只会更改标签的文本并创建一条消息,指出需要重绘标签。 由于代码在主线程中运行,因此在方法退出之前,没有任何东西可以处理该消息。
简单的解决方案是强制重画控件:
labelTest.Text = "Loading, please wait.";
labelTest.Update();
retrieveData();
这将重新绘制标签,以便显示消息,但是在加载数据时应用程序仍然无响应。 为了保持应用程序的响应速度,您可以启动一个新线程来完成工作,或者按照Reed Copsey在其回答中的建议使用async
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.