在C#中的代码开头和之后更改标签的文本

时间:2014-10-09 18:50:36

标签: c#

我有以下代码,它将从网站上的.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分钟,它也只会被改为“完成”。 这里发生了什么事?我怎样才能使它发挥作用?

2 个答案:

答案 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