C# 如何制作一个实时C定时器,在标签中显示执行时间,而不删除任何定时器。间隔事件?
我有一个启动计时器的按钮,计时器会每100ms打印一次当前的执行时间,但是当我做一些计算时,计时器会暂停,直到计算完成,我想计算会打扰计时器,因此计时器会被删除或阻塞这个线程 事实上,计算非常复杂,可能需要40秒,我只需要每100毫秒显示一次执行时间,告诉用户这个函数离结束有多近,你能告诉我怎么做吗C# 如何制作一个实时C定时器,在标签中显示执行时间,而不删除任何定时器。间隔事件?,c#,C#,我有一个启动计时器的按钮,计时器会每100ms打印一次当前的执行时间,但是当我做一些计算时,计时器会暂停,直到计算完成,我想计算会打扰计时器,因此计时器会被删除或阻塞这个线程 事实上,计算非常复杂,可能需要40秒,我只需要每100毫秒显示一次执行时间,告诉用户这个函数离结束有多近,你能告诉我怎么做吗 double a = 0; public Form1() { InitializeComponent(); timer1.Interval =
double a = 0;
public Form1()
{
InitializeComponent();
timer1.Interval = 100;
}
private void timer1_Tick(object sender, EventArgs e)
{
a += 0.1;
label1.Text = a.ToString();
}
private void UserStartTimer_Click(object sender, EventArgs e)
{
a = 0.0;
timer1.Enabled = true;
}
private void UserCalcSomething_Click(object sender, EventArgs e)
{
double s = 0;
for (int i = 0; i < 100000; i++)
{
for (int j = 0; j < 10000; j++)
{
s = i + j;
}
}
}
private void UserStopTimer_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
}
只需在另一个线程或任务中执行计算:
private void UserCalcSomething_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() => {
double s = 0;
for (int i = 0; i < 100000; i++)
{
for (int j = 0; j < 10000; j++)
{
s = i + j;
}
}
}
}
可能的Thx副本供您回复。但事实上,在我的例子中,长时间运行的操作包含很多thread.sleeprandom和update label/button/chart,而不仅仅是循环中的循环,因此即使我添加了Application.DoEvent,thread.sleeprandom的优先级仍然高于Timer对象在非实时操作系统上没有实时性。计时器不准确,间隔设置为100的含义很好,在100毫秒或更长时间后,将发出滴答声事件的信号