110,566
社区成员
发帖
与我相关
我的任务
分享
ThreadPool.QueueUserWorkItem(delegate{异步执行的方法},要传入线程的参数);
异步执行的方法(object obj)
{
经过访问是数据库等操作以后,如果要更新UI界面
就使用this.invoke(delegate{操作UI控件的方法})
}
操作UI控件的方法()
{
操作UI
}
//BackgroundWorker控件,等待效果
private void DoSearch(object sender, EventArgs e)
{
BackgroundWorker worker = GetWorker();
worker.RunWorkerAsync();
//Your Search function
worker.CancelAsync();
}
private BackgroundWorker GetWorker()
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.WorkerSupportsCancellation = true;
return worker;
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
MessageForm mf = new MessageForm();
mf.Show();
BackgroundWorker worker = (BackgroundWorker)sender;
while (true)
{
mf.BringToFront();
mf.Refresh();
if (worker.CancellationPending)
{
mf.Close();
e.Cancel = true;
}
else
{
e.Cancel = false;
}
System.Threading.Thread.Sleep(10);
}
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
((BackgroundWorker)sender).Dispose();
}