1 / 1 / 0
Регистрация: 23.08.2015
Сообщений: 91
1

Работа с async await

04.10.2016, 20:50. Показов 1148. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Помогите исправить код. Мне нужно сделать поиск по реестру, например ввожу слово Console, программа должна получить все имена с путями от реестра где присутствует в строке слово Console, при этом главное окно не должно зависать. Я написал вот такой код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
private async void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != string.Empty)
                await Task.Run(() => Find(textBox1.Text));
            else
                MessageBox.Show("Enter word!");
        }
 
        private async void Find(string word)
        {
            foreach (var item in root)
                await Task.Run(() => BuildChildNodes(word, item));
        }
 
        private void BuildChildNodes(string word, RegistryKey key)
        {
            try
            {
                foreach (var name in key.GetSubKeyNames())
                {
                    if (name != "SECURITY" && name != "SUM")
                    {
                        this.Invoke((MethodInvoker)async delegate
                        {
                            if (name.Contains(word))
                            {
                                ListViewItem item = new ListViewItem(name);
                                item.SubItems.Add(key.OpenSubKey(name).ToString());
                                listView1.Items.Add(item);
                            }
                            await Task.Run(() => BuildChildNodes(name, key));
                        }, null);
                    }
                }
            }
            catch { }
        }
Поиск вроде работает, но смотрю иногда выводит не только те слова в которых есть слово Console, да еще и главное окно зависает пока поиск не пройдется по всему реестру. Помогите исправить ошибку.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.10.2016, 20:50
Ответы с готовыми решениями:

Async/ await как правильно ввести данные в async метод (консоль)
Привет , кто то может помочь ?) проблема в тому что у меня есть async метод который запускается...

Async/await
В интернете копался ничего информативного не нашел, все в каких- то не понятных для новичка...

async/await
https://metanit.com/sharp/tutorial/13.7.php вот код Task<T>: // определение...

async/await (._. )
Опять я с глупым вопросом. Не могу понять, почему метод, который выгружает данные не асинхронный?...

1
653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
04.10.2016, 20:58 2
Restartuk, Invoke выполняет код из главного потока. Вам в потоке нужно данные куда-то собирать, а уже потом заполнять ваши контролы.

А вообще, причем тут async/await?

Update: ну да, Windows Forms обработчик, вижу...
0
04.10.2016, 20:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2016, 20:58
Помогаю со студенческими работами здесь

Async await
Пытыюсь разобраться с async/await но что то без успешно пока. Не подскажете как переделать этот код...

Проблемы с async и await
Добрый день. Помогите разобраться c api, для начала вот код Метод класса: async...

Task и async-await
Объясните пожалуйста, в чем преимущество async-await? И в чем разница между обычной задачей? Ведь...

Async await, использование
Знатоки, есть ли разница между написанием? Я где-то читал, что второй способ хуже, ибо создается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru