特殊过程中的锁定控制

Locked Controls during Special Process

我写了一个函数,可以从网上下载图片之类的东西,然后使用它 在特殊按钮的点击事件中。 我的问题是当我点击按钮时,应用程序开始从 互联网,我所有的表格控件,锁定(直到下载过程完成!) 不仅控制,我所有的表格也是如此。 那么我如何在应用程序后台处理这个过程以及 用户可以同时使用其他控件。

你只需要异步编程

这是一个非常简单的演示

private async void button1_Click(object sender, EventArgs e)
{
    this.Text = "doing something...";
    var result = await SomeHeavyWork();
    this.Text = result.ToString();
}

private async Task<int> SomeHeavyWork()
{
    using (var hc = new HttpClient())
    {
        var data = await hc.GetAsync("www.google.com");
        return data.Content.Headers.Count();
    }
}

这里发生了什么?

  1. 点击button1时,button1_Click会执行。
  2. 它首先将表单文本设置为"doing something..."
  3. 它现在等待 SomeHeavyWork() 完成它的工作。
  4. 我们现在正在退出 button1_Click 函数并执行我们在单击 button1 之前所做的操作(运行 表单消息循环)。但在其他地方我们执行 SomeHeavyWork() 并等待它。
  5. SomeHeavyWork() 作业完成后,我们回到 button1_Click 并执行 this.Text = result.ToString(); 行。

请阅读这篇文章msdn article