2015-01-17 3 views
1

Я написал функцию, которая загружает что-то вроде рисунка из сети и использует его в событии с щелчком специальной кнопки. моя проблема в том, когда я нажимаю кнопку, и приложение начинает загружать рис из интернет, все мои элементы управления в форме, блокировка (пока процесс загрузки не завершен!) не просто управляет только всей моей формой. , так как я могу обрабатывать этот процесс в фоновом режиме приложения, и пользователь может работать с другим элементом управления в то же время.Заблокированные элементы управления во время специального процесса

+0

все, что вам нужно, это асинхронное программирование – dotctor

+0

http://msdn.microsoft.com/en-us/library/hh191443.aspx – dotctor

ответ

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. он сначала установил текст формы в «что-то ...»
  3. сейчас он ждет SomeHeavyWork(), чтобы завершить свою работу.
  4. Теперь мы выходим из функции button1_Click и делаем то, что мы делали, прежде чем нажимать button1 (выполняется цикл сообщений формы). но в другом месте мы выполняем SomeHeavyWork() и ожидаем его.
  5. , когда SomeHeavyWork() работа закончена, мы вернулись к button1_Click и выполнили линию this.Text = result.ToString();.

пожалуйста, прочитайте это msdn article

+0

Тпх человек, им будет читать асинхронное программирование, его помощь мне слишком – Falcon

Смежные вопросы