Timer.Start()仅适用于第一次调用?
问题描述:
我使用System.Windows.Forms.Timer
显示传输文件更新进度(的timeleft,速度..等)Timer.Start()仅适用于第一次调用?
,我也用backgroundworker
将文件发送
-
backgroundWorker1_DoWork
电话timer1.Start();
-
backgroundWorker1_RunWorkerCompleted
电话timer1.Stop();
它只在第一次调用timer1.Strat
时工作正常,但是当它再次调用后r 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));
}
}
它是怎么回事,我该如何解决它?
答
我已经想通了,我用的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()
时间,没必要“自动复位”。
sumAll是什么定义?你怎么知道它没有被召唤。你是否在调试模式下断点,它从不打? – 2012-03-10 04:07:39
sumAll是sentBytes ..就像[512k]/23340K 不,我没有说它没有被调用...它叫但不工作..它给了我也不例外..只是标签不更新了。 – 2012-03-10 04:16:43
也许如果你让文字变得更大胆,它会自行解决。 – 2012-03-10 04:17:00