Есть родительская форма EditData, и дочерняя форма DataClass. Как только открываю дочернюю форму там идет выгрузка данные с MS SQL в DataGridView, очень долго загружается. И я решил, добавить дополнительную форму Process, чтоб пользователю было понятнее, что она загружается дочерняя форма. И как только загрузилась (т.е. открылась) дочерняя форма, то тогда форма Process закрывается. Но никак не получается...
Вот пример кода, родительская форма EditData:
Process process;
public EditData()
{
InitializeComponent();
}
private void OpenClassificationWindow_Click(object sender, EventArgs e)
{
if (dataClass == null || dataClass.IsDisposed)
{
process = new Process();
process.ShowDialog();
dataClass = new DataClass(process)
{
MdiParent = this
};
dataClass.Show();
}
else
{
dataClass.Activate();
}
}
Пример кода, дочерняя форма DataClass:
string connection = Settings.Default.DataClient;
SqlConnection sqlConnection;
SqlCommand sqlCommand;
public DataClass(Process pr)
{
InitializeComponent();
LoadingClass();
pr.Close();
}
private void LoadingClass()
{
sqlConnection = new SqlConnection(connection);
string sql = "SELECT * FROM Class";
sqlConnection.Open();
try
{
SqlDataAdapter dataAdapter = new SqlDataAdapter(sql, sqlConnection);
DataSet set = new DataSet();
dataAdapter.Fill(set);
TableClass.DataSource = set.Tables[0];
sqlConnection.Close();
}
catch (Exception)
{
MessageBox.Show("Ошибка", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Dispose();
}
finally
{
sqlConnection.Close();
}
}
Пример кода, форма загрузки Process:
public Process()
{
InitializeComponent();
Task task = Task.Run(() => Work());
}
public void Work()
{
progressBar1.Style = ProgressBarStyle.Marquee;
progressBar1.MarqueeAnimationSpeed = 50;
}
Но форма загрузки не закрывается, и не открывается дочерняя форма. Если вместо ShowDialog поставить на Show, то вообще не видно ProgressBar и так же самое, не закроется и не откроется дочерняя форма.
P.S. Помогите пожалуйста, как можно реализовать процесс? У меня скоро будет защита проекта...
Вот метод кнопки
private async void buttonShowData_Click(object sender, EventArgs e)
{
//готовим окно ожидания
FormWaiting formWaiting = new FormWaiting();
formWaiting.Owner = this;
//показываем окно ожидания
formWaiting.Show();
try
{
//готовим окно данных
_formData = new FormData();
_formData.Owner = this;
//даем команду загрзить данные
await Task.Run(() => _formData.LoadData());
}
finally
{
//закрываем окно ожидания
formWaiting.Close();
formWaiting.Dispose();
//отображаем окно с данными
_formData.Show();
}
}
Вот форма, которая отображает данные
public partial class FormData : Form
{
private Repository _repo = new Repository();
private BindingSource _wordsSource = new BindingSource();
public FormData()
{
InitializeComponent();
}
public void LoadData()
{
//тестовая пауза
Thread.Sleep(TimeSpan.FromSeconds(3));
//получаем из БД данные
_wordsSource.DataSource = _repo.GetWords();
_dataGridViewWords.DataSource = _wordsSource;
}
}
Целиком проект можно скачать здесь.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть код XAML и есть класс CustomVisualFrameworkElement, который унаследован от FrameworkElement и реализует с помощью Visual некоторые фигурыНо XAML почему то не видит...
Возник один вопрос по игровому движку UnityДопустим я хочу создать экземпляр класса Camera
Возникла задача отправлять email напрямую из программыПо мимо просто текста прикреплять файл лога к письму