我有以下代码,它将从网站上的.php
文件中获取一些数据,它将格式化数据并在表单上显示。 (使用visual studio)
有时,获取数据需要一些时间。所以我希望在获取数据期间将名为U
的标签更改为“刷新...”。
所以我使用了下面的代码。(我正在展示相关部分)
private void refresh(object sender, MouseEventArgs e)
{
U.Text = "Refreshing ...";
string r = HttpGet("http://www.example.com/?Fetch=OK");
U.Text = "Done";
}
但是这段代码没有将文本改为“刷新...”,即使提取需要1分钟,它也只会被改为“完成”。 这里发生了什么事?我怎样才能使它发挥作用?
答案 0 :(得分:5)
处理此问题的最佳方法通常是异步获取数据:
private async void Refresh(object sender, MouseEventArgs e)
{
U.Text = "Refreshing...";
string r = await HttpGetAsync("http://www.example.com/?Fetch=OK"); // Requires an async version
U.Text = "Done";
}
这需要更改HttpGet
方法以异步方式获取数据,并返回Task<string>
而不是string
。
答案 1 :(得分:0)
问题在于您的代码以某种方式执行,由于计算机资源不足,应用程序在加载资源时停止运行。完成后,它会更新内容。您应该使用Threading of .NET来使用线程执行不同的任务。
将每个函数分配给不同的线程,UI线程必须不同,资源加载也必须不同。
看看这里,msdn.microsoft.com/en-us/library/system.threading.thread(v=vs.110).aspx