Вот трехпоточная версия, которую я быстро взломал, и которая поможет. Это может быть удалено в любом месте в видимой форме (или может быть изменено для program.cs) и вызовет новое, центрированное, модальное диалоговое окно с плавной прокруткой, которая будет доминировать в внимании пользователя, пока не будет установлена FinishedProcessing в родительском потоке к истине.
//Update to true when finished loading or processing
bool FinishedProcessing = false;
System.Threading.AutoResetEvent DialogLoadedFlag
= new System.Threading.AutoResetEvent(false);
(new System.Threading.Thread(()=> {
Form StockWaitForm = new Form()
{ Name = "StockWaitForm", Text = "Please Wait...", ControlBox = false,
FormBorderStyle = FormBorderStyle.FixedDialog, StartPosition = FormStartPosition.CenterParent,
Width = 240, Height = 80, Enabled = true };
ProgressBar ScrollingBar = new ProgressBar()
{ Style = ProgressBarStyle.Marquee, Parent = StockWaitForm,
Dock = DockStyle.Fill, Enabled = true };
StockWaitForm.Load += new EventHandler((x, y) =>
{
DialogLoadedFlag.Set();
(new System.Threading.Thread(()=> {
while (FinishedProcessing == false) Application.DoEvents();
StockWaitForm.Invoke((MethodInvoker)(()=> StockWaitForm.Close()));
})).Start();
});
this.Invoke((MethodInvoker)(()=>StockWaitForm.ShowDialog(this)));
})).Start();
while (DialogLoadedFlag.WaitOne(100,true) == false) Application.DoEvents();
//
//Example Usage
//Faux Work - Have your local SQL server instance load here
for (int x = 0; x < 1000000; x++) int y = x + 2;
FinishedProcessing = true;
Настройка по вкусу. Кроме того, если вы используете это в производственном приложении, оберните содержимое нового потока в блоки try ... catch в CYA . И наконец, я выпускаю этот код для вас в рамках «Публичной лицензии Coderer / SO v1.1» следующим образом:
Coderer Public License / SO v1.0
Я, человек, известный как «Coderer» в сообществе «Переполнение стека», согласен тщательно рассмотреть вопрос о переходе на методологию управления проектами, которая позволяет добавлять дополнительные классы в проекты на этапе «Выполнение». Я понимаю, что нацистский контроль за изменениями вреден для всех вовлеченных сторон.