特殊过程中的锁定控制

时间:2015-01-17 15:03:17

标签: c# .net winforms

我写了一个从网上下载类似图片的功能,然后使用它 在特殊按钮的单击事件中。 我的问题是,当我点击按钮,应用程序开始下载图片 互联网,我在窗体中的所有控件,锁定(直到下载过程完成!) 不仅仅是控制,我的所有形式。 那么如何才能在应用程序的背景下处理这个过程 用户可以同时使用其他控件。

1 个答案:

答案 0 :(得分:1)

您只需要异步编程

这是一个非常简单的演示

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. 首先将表单文本设置为&#34;做某事......&#34;
  3. 它现在等待SomeHeavyWork()完成其工作。
  4. 我们现在退出button1_Click函数并执行我们正在执行的操作,然后再单击button1(运行表单消息循环)。但在其他地方我们执行SomeHeavyWork()并等待它。
  5. SomeHeavyWork()工作完成后,我们返回button1_Click并执行this.Text = result.ToString();行。
  6. 请阅读此msdn article