BackgroundWorker 使用方法
时间:2010-09-01 来源:iceknp
使用注意(来自MSDN):
您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
BackgroundWorker 事件不跨 AppDomain 边界进行封送处理。请不要使用 BackgroundWorker 组件在多个 AppDomain 中执行多线程操作。
private delegate void DoWorkerEventHandler(string strText);
private void btnThdWorker_Click(object sender, EventArgs e)
{
BackgroundWorker thdWorker = new BackgroundWorker();
thdWorker.DoWork += new DoWorkEventHandler(thdWorker_DoWork);
thdWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(thdWorker_RunWorkerCompleted);
thdWorker.RunWorkerAsync();
}
//线程工作事件
public void thdWorker_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(4000);
//第一种
this.Invoke(new DoWorkerEventHandler(this.rtbSend.AppendText),
new object[] { "BackgroundWorker使用" });
//第二种
SetWorkerText("BackgroundWorker使用");
}
//线程工作完毕事件
public void thdWorker_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
rtbSend.AppendText("线程工作完毕事件封送回控件线程...");
}
public void SetWorkerText(string strText)
{
if (this.InvokeRequired)
{
DoWorkerEventHandler handler = new DoWorkerEventHandler(SetWorkerText);
this.Invoke(handler, new object[] { strText });
}
else
{
lock (this.rtbSend)
{
rtbSend.AppendText(strText);
}
}
}
若有疑问或不正之处,欢迎提出指正和讨论。
相关阅读 更多 +