1.写一个后台处理的类
/// <summary>
/// 后台处理方法类
/// </summary>
public class BizBackHandle
{
#region private member
private static BizBackHandle _current;
//后台处理的对象
private BackgroundWorker _backgroundWorker;
//后台处理后的结果
private string temp;
//页面对象的引用
private Label _lb;
#endregion
#region public property
public static BizBackHandle Current
{
get
{
if (_current == null)
{
_current = new BizBackHandle();
}
return _current;
}
}
/// <summary>
/// 页面对象的引用
/// </summary>
public Label Lb
{
get { return _lb; }
set { _lb = value; }
}
#endregion
#region public methods
public BizBackHandle()
{
//初始化后台对象
_backgroundWorker = new BackgroundWorker();
_backgroundWorker.WorkerSupportsCancellation = true;
_backgroundWorker.WorkerReportsProgress = true;
_backgroundWorker.DoWork += new DoWorkEventHandler(_backgroundWorker_DoWork);
_backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_backgroundWorker_RunWorkerCompleted);
}
/// <summary>
/// 启动后台处理
/// </summary>
public void DoBackGroundWork()
{
_backgroundWorker.RunWorkerAsync();
}
#endregion
#region events
/// <summary>
/// 后台完成事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("报告:后台处理完了,可以看后台的处理结果了");
if (Lb != null)
{
Lb.Text = temp;
}
}
/// <summary>
/// 后台处理事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
MessageBox.Show("报告:后台开始工作了");
temp = "这是在后台处理的结果 /r/n Start time:" + DateTime.Now.ToLocalTime() + "/r/n";
Thread.Sleep(10000);
temp += " End time:" + DateTime.Now.ToLocalTime() + "/r/n";
}
#endregion
}
2.在页面上画两个label 和 一个 button
调用的方法是:
private void button1_Click(object sender, EventArgs e)
{
BizBackHandle.Current.Lb = label1;
BizBackHandle.Current.DoBackGroundWork();
label1.Text = "这是前台显示的值,后台处理已经开始了";
label2.Text = "但是这不影响前台的处理,后台处理完会自动显示结果";
}
/// <summary>
/// 后台处理方法类
/// </summary>
public class BizBackHandle
{
#region private member
private static BizBackHandle _current;
//后台处理的对象
private BackgroundWorker _backgroundWorker;
//后台处理后的结果
private string temp;
//页面对象的引用
private Label _lb;
#endregion
#region public property
public static BizBackHandle Current
{
get
{
if (_current == null)
{
_current = new BizBackHandle();
}
return _current;
}
}
/// <summary>
/// 页面对象的引用
/// </summary>
public Label Lb
{
get { return _lb; }
set { _lb = value; }
}
#endregion
#region public methods
public BizBackHandle()
{
//初始化后台对象
_backgroundWorker = new BackgroundWorker();
_backgroundWorker.WorkerSupportsCancellation = true;
_backgroundWorker.WorkerReportsProgress = true;
_backgroundWorker.DoWork += new DoWorkEventHandler(_backgroundWorker_DoWork);
_backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_backgroundWorker_RunWorkerCompleted);
}
/// <summary>
/// 启动后台处理
/// </summary>
public void DoBackGroundWork()
{
_backgroundWorker.RunWorkerAsync();
}
#endregion
#region events
/// <summary>
/// 后台完成事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void _backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("报告:后台处理完了,可以看后台的处理结果了");
if (Lb != null)
{
Lb.Text = temp;
}
}
/// <summary>
/// 后台处理事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void _backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
MessageBox.Show("报告:后台开始工作了");
temp = "这是在后台处理的结果 /r/n Start time:" + DateTime.Now.ToLocalTime() + "/r/n";
Thread.Sleep(10000);
temp += " End time:" + DateTime.Now.ToLocalTime() + "/r/n";
}
#endregion
}
2.在页面上画两个label 和 一个 button
调用的方法是:
private void button1_Click(object sender, EventArgs e)
{
BizBackHandle.Current.Lb = label1;
BizBackHandle.Current.DoBackGroundWork();
label1.Text = "这是前台显示的值,后台处理已经开始了";
label2.Text = "但是这不影响前台的处理,后台处理完会自动显示结果";
}