• Почему не работает асинхронность?

    @pkrich
    Dyikot,
    private async Task DownloadDataAndAddToTable()
    {

    tablesForSavingData = await Serialization.DownloadTable(filePath);...
  • Почему не работает асинхронность?

    @pkrich
    Dyikot, это всё равно сразу же возвращает нас в поток UI. Имеет смысл что то типа
    private async Task DownloadDataAndAddToTable()
            {
    
                tablesForSavingData = await Serialization.DownloadTable(filePath);
    
                if (tablesForSavingData.Count != 0)
                {
                    int i = 1;
                    foreach (var table in tablesForSavingData)
                    {
                        tablesForViewData.Add(
                             table.ToDataGridView("table" + (i++).ToString()));
    
                    }
                }
                else tablesForViewData.Add(defaultTable);
    
                Invoke(() =>
                {
                    foreach (var table in tablesForViewData)
                    {
                        Controls.Add(table);
                        MakeTableActive(table);
                    }
                });
            }


    Ну и DownloadTable тоже должно быть Task
  • Почему не работает асинхронность?

    @pkrich
    Я не увидел Invoke в асинхронном варианте. То, что касается пользовательского интерфейса, должно происходить в потоке UI. То есть сначала загружаем в отдельном потоке данные из файла, создаём новые элементы интерфейса пользователя и потом через Invoke добавляем созданные элементы в Controls в потоке UI. Примерно так. А первый вариант с Thread фактически сразу из нового потока вызывает Invoke и управление сразу передаётся в основной поток приложения (UI). С таким же успехом можно было бы сразу всё выполнить безо всяких Thread и Task.
    Что касается последнего вопроса, то лучше использовать асинхронность, это гораздо экономичнее с точки зрения системных ресурсов.