BackgroundWorkerを使用してみる BackgroundWorker コンポーネントには 4 つのイベントがあります。
そのうちの 2 つを実装する必要があります: DoWork と RunWorkerCompleted
DoWork メソッドはスレッドで実行され、そこで作業を行います (または、あなたの場合はデリゲートを呼び出します)。作業が終了すると RunWorkerCompleted が呼び出され、そこで Hide() メソッドを呼び出すことができます。
進行状況を表示したい場合は、ProgressChanged イベントを実装できます。これにより、完了したパーセンテージとオブジェクトを渡すことができます (通常、私は何をしているかについてメッセージを渡します)。
次に、通常どおり Drawing を実行し、バックグラウンド ワーカー 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 スレッドで実行され、実行中にハングアップすることはありません。