我有一个启动Timer1的按钮,Timer1每100毫秒打印一次当前执行时间,但是当我进行某些计算时,timer1_Tick()将暂停直到完成该计算,我认为该计算会干扰Timer1,因此该timer1_Tick()被丢弃(或阻止了该线程)。
实际上,计算非常复杂,可能需要40秒钟,我只需要每100ms显示一次执行时间就可以告诉用户该函数的结尾有多接近,请您告诉我如何执行此工作? ?
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;
}
答案 0 :(得分:1)
只需在另一个线程或任务中执行计算即可:
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;
}
}
}
}