尝试使用BackgroundWorker BackgroundWorker 组件有 4 个事件。
您需要实现其中 2 个:DoWork 和 RunWorkerCompleted
DoWork 方法在线程中执行,是您工作的地方(或者在您的情况下,调用您的委托) RunWorkerCompleted 在工作完成时调用,您可以在那里调用 Hide() 方法。
如果你碰巧想显示进度,你可以实现 ProgressChanged 事件,它允许你传入一个完成的百分比和一个对象(通常我会传递一条关于我正在做什么的消息)
然后像往常一样做你的绘图,并调用后台工作人员 RunWorkerAsync 来调用它。
public class Wait : Form
{
BackgroundWorker _bgWorker = new BackgroundWorker();
public delegate void toExecuteDele(object args);
public toExecuteDele ToExecute;
public Wait()
{
InitializeComponent();
_bgWorker.DoWork += new DoWorkEventHandler( DoWork )
_bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler (WorkDone);
}
public void Execute(object args)
{
// Display Stuff (label, start a progress bar pulsing, maybe enable disable stuff
DispalyStuff(" Plate Wait");
_bgWorker.RunBackgroundAsync(args);
}
private void DoWork(object sender, DoWorkEventArgs e)
{
if( ToExecute != null )
ToExecute(e.Argument);
}
public void WorkDone(object sender, RunWorkerCompletedEventArgs e)
{
// Display an Error if there is an exception in the event args
Hide();
}
}
DoWork 中的一切都发生在另一个线程中,您所做的一切都在 UI 线程中运行,并且在执行时不会挂起。