这是我快速破解的三线程版本,可以解决问题。这可以以可见形式放置在任何地方(或者可以针对 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 Public License / SO v1.1”向您发布此代码,如下所示:
Coderer Public License / SO v1.0
我,在社区“Stack Overflow”上被称为“Coderer”的人,同意彻底考虑切换到一个健全的项目管理方法,该方法允许在执行阶段向项目添加额外的类。我知道类似纳粹的变更控制对所有相关方都是不健康的。