这是一个用线程打开繁忙窗口的例子
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication5.线程
{
public partial class 线程 : Form
{
frmbusy frm = new frmbusy();
public 线程()
{
frm = new frmbusy();
InitializeComponent();
}
/ <summary>
/ 全部导出操作完成后,触发此事件。
/ </summary>
//public event RunWorkerCompletedEventHandler ExportingCompleted;
//private void OnRunWorkerCompleted(object sender, DoWorkEventArgs e)
//{
// frm.Close();
//}
/ <summary>
/ 每处理完成一行,即触发此事件。
/ </summary>
//public event ProgressChangedEventHandler ExportingProgressChanged;
//private void OnExportingProgressChanged(object sender, DoWorkEventArgs e)
//{
// frm.Close();
//}
private void button16_Click(object sender, EventArgs e)
{
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
//if (ExportingProgressChanged != null)
//{
// worker.ProgressChanged += new ProgressChangedEventHandler(ExportingProgressChanged);
//}
//if (ExportingCompleted != null)
//{
// worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(ExportingCompleted);
//}
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);线程执行的百分比
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
System.Threading.Thread.Sleep(1000);
worker.ReportProgress(100);
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
frm = new frmbusy();
frm.ShowDialog ();
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("thead exit");
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Control.CheckForIllegalCrossThreadCalls = false;
try
{
if (e.ProgressPercentage == 100)
frm.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}