Один путь, вероятно, более эффективные способы, хотя. Создайте новую диалоговую форму, которая будет вашим оконным окном/заставкой. Бросьте растровое изображение или что-то еще на нем как единственный предмет. Создайте диалог из основной программы. Переопределите событие загрузки для формы выполнения и оттуда запустите новый поток, который будет выполнять фоновые обработки для загрузки данных. Таким образом вы можете просто вызвать ShowDialog из основного приложения.
Если вы используете System.ComponentModel.BackgroundWorker, то вы можете легко подключить события к тому, когда поток завершится и автоматически завершит диалог с этого события. Элемент управления возвращается обратно в вызывающее приложение, и все готово.
Я делал это в приложении раньше, и он работает нормально, но я уверен, что это новичок. Вот пример кода из события Load в форме, которая запускает фоновый поток (в моем случае, я открываю и анализ больших файлов):
private void FileThreadStatusDialog_Load(object sender, EventArgs e)
{
Cursor = Cursors.WaitCursor;
if (m_OpenMode)
{
this.Text = "Opening...";
StatusText.Text = m_FileName;
FileThread = new BackgroundWorker();
FileThread.RunWorkerCompleted += new RunWorkerCompletedEventHandler(FileThread_RunWorkerCompleted);
FileThread.DoWork += new DoWorkEventHandler(FileOpenThread_DoWork);
FileThread.WorkerSupportsCancellation = false;
FileThread.RunWorkerAsync();
}
else
{
this.Text = "Saving...";
StatusText.Text = m_FileName;
FileThread = new BackgroundWorker();
FileThread.RunWorkerCompleted += new RunWorkerCompletedEventHandler(FileThread_RunWorkerCompleted);
FileThread.DoWork += new DoWorkEventHandler(FileSaveThread_DoWork);
FileThread.WorkerSupportsCancellation = false;
FileThread.RunWorkerAsync();
}
}
А вот что завершена работа метод выглядит которые существуют в форме:
private void FileThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
FileThread = null;
DialogResult = DialogResult.OK;
Close();
}
Вот как я открываю окно выполнения из основного диалога:
FileThreadStatusDialog thread = new FileThreadStatusDialog(m_Engine, dlg.FileName, true);
if (thread.ShowDialog(this) == DialogResult.OK)
{
m_Engine = thread.Engine;
FillTree();
}
Я думаю, что вы должны сказать, что язык приложение написано в (не только какие база данных). – MusiGenesis
извините, сделал некоторые изменения;) – Kai
MusiGenesis, а не только «язык», что приводит к неопределенности «У меня есть ListBox в C#». –