Загрузка данных в dataGridView зависает во время загрузки, почему здесь не работает потоковая обработка?C#

Место общения программистов C#
Ответить
Anonymous
 Загрузка данных в dataGridView зависает во время загрузки, почему здесь не работает потоковая обработка?

Сообщение Anonymous »

У меня есть следующий метод, который загружает данные в DataGridView в отдельной функции. Когда я вызываю метод нажатием кнопки, первые два метода запускаются без зависания окон, поскольку у них нет обновлений пользовательского интерфейса.

Код: Выделить всё

    private async void btnSearch_Click(object sender, EventArgs e)
{

btnFolder.Enabled = false;
btnSearch.Enabled = false;
btnStop.Enabled = true;

try
{
var foldersTask = Task.Run(() => GetAccessibleDirectories(txtFolderPath.Text, chkSubFolders.Checked));
var folders = await foldersTask;
var BF = await Task.Run(() => getFolderdetails(folders));

await Task.Run(() => this.BeginInvoke(new Action(() => loadFoldersToGrid(BF)))); // Runs on UI thread
}
finally
{
btnFolder.Enabled = true;
btnSearch.Enabled = true;
btnStop.Enabled = false;
}
}
Но когда он запускает «loadFoldersToGrid», окно зависает (оно возвращается в нормальное состояние после полной загрузки). Я не понимаю, почему.

Код: Выделить всё

private async void loadFoldersToGrid(BrowserFolders BF)
{
int i = 0;
long MBcon = 1048576;
long MB, Total = 0;

dgFolders.Rows.Clear();
dgFolders.Rows.Add(BF.folders.Count);

foreach (var rec in BF.folders)
{
dgFolders.Rows[i].Cells[0].Value = i;
dgFolders.Rows[i].Cells[1].Value = rec.folderPath;
dgFolders.Rows[i].Cells[2].Value = rec.fileCount;
long folderSize = GetFolderSize(rec.folderPath);
string megabytes = (folderSize / MBcon).ToString("F1");
dgFolders.Rows[i].Cells[3].Value = megabytes;
dgFolders.Rows[i].Cells[4].Value = rec.fileCreated.ToString("MM/dd/yyyy");
Total = Total + folderSize;
i += 1;
}

txtFolderCount.Text = BF.folders.Count.ToString();
txtSize.Text = string.Format("{0:N0} MB", Total / MBcon);
}
Любая помощь? задачи здесь не помогут.

Подробнее здесь: https://stackoverflow.com/questions/793 ... reading-do
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»