我正在使用System.Windows.Forms.Timer
来显示传输文件更新进度(timeleft,speed ..etc)
我还使用backgroundworker
发送文件
backgroundWorker1_DoWork
来电timer1.Start();
backgroundWorker1_RunWorkerCompleted
来电timer1.Stop();
仅在timer1.Strat
的第一次调用中正常工作,但在timer1.Stop()
之后再次调用时才能正常工作。它不起作用。
timer1.Enabled = True;
timer1.Interval = 1000;
private void timer1_Tick(object sender, EventArgs e)
{
long speed = sumAll - prevSum;
prevSum = sumAll;
labelSpeed.Text = CnvrtUnit(speed) + "/S";
if (speed > 0)
{
totalSeconds++;
labelTime.Text = FormatRemainingText(TimeSpan.FromSeconds((sizeAll - sumAll) / speed));
labelTotalTime.Text = FormatRemainingText(TimeSpan.FromSeconds(totalSeconds));
}
}
它有什么问题,如何解决?
答案 0 :(得分:2)
我已经弄明白了,我使用的是System.Timers.Timer
而不是System.Windows.Forms.Timer
System.Timers.Timer timer1 = new System.Timers.Timer(1000);
在类构造函数中,我添加了:
public FileTransfer()
{
InitializeComponent();
timer1.Elapsed += timer1_Tick;
}
private void timer1_Tick(object sender, EventArgs e)
{
long speed = sumAll - prevSum;
Console.WriteLine(speed);
prevSum = sumAll;
Speed(CnvrtUnit(speed) + "/S");
if (speed > 0)
{
totalSeconds++;
Timeleft(FormatRemainingText(TimeSpan.FromSeconds((sizeAll - sumAll) / speed)));
TotalTime(FormatRemainingText(TimeSpan.FromSeconds(totalSeconds)));
}
}
private void Timeleft(string value)
{
if (InvokeRequired)
{
this.Invoke(new Action<string>(Timeleft), new object[] { value });
return;
}
labelTime.Text = value;
}
private void TotalTime(string value)
{
if (InvokeRequired)
{
this.Invoke(new Action<string>(TotalTime), new object[] { value });
return;
}
labelTotalTime.Text = value;
}
private void Speed(string value)
{
if (InvokeRequired)
{
this.Invoke(new Action<string>(Speed), new object[] { value });
return;
}
labelSpeed.Text = value;
}
现在每次拨打timer1.Start()
时都可以使用,无需“自动重置”。