backgroundworker与Timer联合使用问题
功能介绍:
在DoWork方法里,连接FTP,上传文件,并设置timer.interval值。
在timer_tick方法中,调用RunWorkerAsync()
问题:
DoWork方法只执行了一次,并没有按照timer.interval的设定重复执行。
部分代码:
定义全局变量backgroundworker bgwork;
private void timer1_Tick(object sender, EventArgs e)
{
bgWork = new BackgroundWorker();
bgWork.WorkerSupportsCancellation = true;
bgWork.DoWork +=new DoWorkEventHandler(bgWork_DoWork);
bgWork.RunWorkerCompleted +=new RunWorkerCompletedEventHandler(bgWork_RunWorkerCompleted);
bgWork.RunWorkerAsync();
}
public void bgWork_DoWork(object sender, DoWorkEventArgs e)
{
FTPClient ftpC = new FTPClient();
timer1.Enabled = false;
............
//连接FTP,上传文件,设置timer.interval=20000;
}
------解决方案--------------------
1、调用BackgroundWorker的RunWorkerAsync方法(可以传递参数),它将调用DoWork事件
2、在DoWork的事件响应代码中调用耗时的操作,此例中是PingIPs函数
3、在耗时操作中判断CancellationPending属性,如果为false则退出
4、如果要向用户界面发送信息,则调用BackgroundWorker的ReportProgress方法,它将调用ProgressChanged事件(可以将改变通过object类型传递)
5、在ProgressChanged事件的响应代码中将改变呈现给用户
6、如果需要取消耗时操作,则调用BackgroundWorker的CancelAsync方法,需要和步骤3一起使用