c#使用后台工作者我想获得的“时间处理”在保存我的数据库
本文关键字:时间处理 处理 时间 数据库 我的 保存 后台 工作者 | 更新日期: 2023-09-27 18:18:44
private void btnUpdate_Click(object sender, EventArgs e)
{
bgWorker.RunWorkerAsync();
}
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackUpDatabase.BackUp(this.txtPath.Text);
for (int i = 0; i <= 100; i++)
{
// Report progress to 'UI' thread
bgWorker.ReportProgress(i);
// Simulate long task
System.Threading.Thread.Sleep(100);
}
}
private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
lblProgress.Text = String.Format("Progress: {0} %", e.ProgressPercentage);
}
代码正在工作,但我怀疑进度不是确切的时间过程。我遗漏了什么吗?
你的问题有点模糊,不过我还是要试一下:
听起来你需要两个后台工作人员,一个做实际备份,另一个实时报告时间。
幸运的是有一个定时器在后台线程中运行!与system . timers . timer类。
你已经设置了一个线程来做这项工作,所以你所要做的就是创建你的计时器,并启动/更新/停止它。
下面是代码的工作原理:private Timer _Timer;
private DateTime _Start;
private void InitTimer()
{
_Start = DateTime.Now;
_Timer = new Timer(100);
_Timer.AutoReset = false;
_Timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
_Timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
TimeSpan diff = DateTime.Now - _Start;
this.Invoke(new MethodInvoker(delegate()
{
lblProgress.Text = String.Format("Time: {0}", diff);
}));
}
//starts the worker thread
private void btnUpdate_Click(object sender, EventArgs e)
{
InitTimer();
bgWorker.RunWorkerAsync();
}
//Does the backup
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackUpDatabase.BackUp(this.txtPath.Text);
}
//Stops the timer when the backup finishes
private void bgWorker_WorkCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_Timer.Stop();
}
我还没有测试过这段代码,我可能用这个方式偏离了基础:)但是享受吧:)
编辑:再考虑一下这个问题,如果OP想要得到一个百分比,他需要将他的备份分成几个步骤并手动报告。