Среди других параметров, передаваемых в асинхронный метод (который загружает файл и преобразует его в DataTable), есть:
Код: Выделить всё
IProgress ProgressString =
new Progress(text => toolStripStatusLabel1.Text = text);
IProgress ProgressValue =
new Progress(f => toolStripProgressBar1.Value = f);
Код: Выделить всё
DataTable dt = await Task.Run(() => ReadFile(FileName, ProgressString, ProgressValue));
Код: Выделить всё
public static DataTable ReadCSVNew(string FileName,
IProgress ProgressString, IProgress ProgressValue)
{
DataTable resultingDT = CreateBaseTable();
int i = 1;
StreamReader myReader = new StreamReader(FileName, Encoding.UTF8);
var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
{
HasHeaderRecord = true
};
CsvReader csv = new CsvReader(myReader, csvConfig);
// read CSV file
var records = csv.GetRecords();
foreach (var columns in records)
{
ProgressString.Report((i++).ToString());
ProgressValue.Report(i++);
}
}
Но когда я пытаюсь вместо этого использовать ProgressString.Report((i++).ToString()) в том же цикле, это не работает. Пользовательский интерфейс просто зависает, пока поток не завершится, а текстtoolStripStatusLabel не изменится.
Не могу найти ничего по этой проблеме в Интернете. Поэтому мне интересно, в чем может быть основная причина проблемы.
Подробнее здесь: https://stackoverflow.com/questions/791 ... method-usi
Мобильная версия