У меня есть программа написанная на windows forms , которая при запуске грузит данные из *.txt файла (объем файла постепенно увеличивается) и отображает их после загрузки в таблице dataGriedView.
Так вот, проблема в том, что данные при запуске формы отображаются с задержкой небольшой. Во время запуска программы, форма прогружается сначала пустая, а остальное появляется с небольшой задержкой.
Как сделать это более красивее? Как показать форму именно тогда, когда все данные будут загружены и готовы к показу и без задержки?
Любой из этих вариантов должен решить твою проблему:
Сделай заставку и показывай ее до момента пока не прогрузятся данные, а потом уже показывай вторую форму с самими данными.
в program.cs подгружаешь данные в асинхронном методе. Обновляя при этом переменную с ходом загрузки. Как только загрузка достигнет 100% закрываем форму-заставку и открываем MainForm.
Перемести данные в место с которого они будут грузится быстрее. Например в БД. Или сериализованный файл ( можно подсмотреть код вот здесь Сериализация и десериализация не работают ) -- бинарные файлы обрабатываются быстрее текста.
Не грузи ВСЕ данные. Грузи только то что прям сейчас нужно отображать -- т.е. сделай его виртуальным. И то грузи эти данные в левый посредник, а потом отрисовывай данные из этого посредника в DataGridView через DataSource.
Переключи DGV в виртуал моуд через блок пропертей в вижуал студио, а потом напиши реализацию:
private void dataGridView1_CellValueNeeded(
собственно, в интернете туториалов с примерами кода просто нереально много в т.ч. есть в документации мелкософта. Иначе -- гугли "datagridview virtual example".
Одним из вариантов решения данной проблемы может выступать сериализация. Ниже приведен один из примеров бинарной сериализации при помощи BinaryFormatter, который находится в пространстве имен System.Runtime.Serialization.Formatters.Binary. Также сериализуемый класс должен быть помечен атрибутом [Serializable]. Еще примеры бинарной сериализации можно найти: здесь и здесь.
//Сериализация
BinaryFormatter formatter = new BinaryFormatter(); // создаем объект BinaryFormatter
string fileName = Test.Name.Trim(System.IO.Path.GetInvalidFileNameChars()).TrimEnd((System.IO.Path.GetInvalidFileNameChars()));
string path = $"{Environment.CurrentDirectory}" + "\\Tests\\" + $"{fileName}.dat"; //Собираемый полный путь до файла куда будем сериализовать
try
{
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate)) // создаем объект FileStream для записи в файл.
{
formatter.Serialize(fs, Test); //Вызываем у formatter метод Serialize, который принимает объект FileStram и сериализуемый объект
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
//Десериализация
OpenFileDialog openFileDialog = new OpenFileDialog(); // в данной программе использовался OoenFileDialog для поиска файлов для десериализации.
openFileDialog.Filter = "(*.dat)|*.dat";
openFileDialog.InitialDirectory = testsDirectory.FullName;
if (openFileDialog.ShowDialog() == true)
{
BinaryFormatter formatter = new BinaryFormatter();
Test test;
try
{
using (FileStream fs = new FileStream(openFileDialog.FileName, FileMode.OpenOrCreate)) //Здесь FileStream инициализируется путем полученным из OpenFileDialog. Можно использовать константный путь к файлу.
{
test = (Test)formatter.Deserialize(fs); //Вызываем функцию Deserialize, которая принимает FileStream и возвращает object. Приводим к типу который был сериализован.
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Делаю меню смены пароля пользователя на MySQLВ принципе все работает, но если я указываю что бы оно меняло на то что ввёл пользователь в input,...
Подскажите, как этим воспользоваться в filephp, добавленном в папку с темой
Почему функция записывает в начало возвращаемого файла HTML код моей страницы, а уже потом дописывается сам файлВ чём может быть проблема?...