c#winform多个timer相互有影响吗

我有三个time一个是显示当前时间到label(这个是在form1界面上的)另外两个在form2界面(form1点了确定会弹出form2,但是form1并不会关闭,for... 我有三个time 一个是显示当前时间到label(这个是在form1界面上的)另外两个在form2 界面 (form1点了确定会弹出form2,但是form1并不会关闭,form1是全屏的,form2居中,还是可以看到form1上的时间)现在有个问题,其他两个time 一个是60秒txetbox为空就关闭form2,另一个是给lable显示60秒倒计时,但是显示倒计时那个明显慢于其他两个time 大概1分钟慢了20秒
贴一下那个慢的time的程序
private void timer3_Tick(object sender, EventArgs e)
{
scss = scss-1;
label1.Text = scss.ToString();
}

private void Form2_Load(object sender, EventArgs e)
{

timer3.Start();//这个是给lable赋值倒计时的
timer1.Start();//这个time1并不是form1的time1,是对textbox判断非空并进行下一步
timer2.Start();//这个是60秒判断为空就关闭form2

}
就是 55 明显慢于右下角的时间 ,右下角时间过了一分钟里面那个界面(form2)就会关闭
和form2 的time2关闭计时器时间一样
展开
 我来答
syht2000
高粉答主

2016-11-18 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部

timer本身有个精度问题,所以不能指望你设1000它就是一秒,象timer3中你的显示什么的本身也会占用时间,这些综合起来你就不能再用scss=scss-1(或者写作scss--)这种,在表示倒计时的时候就应该用当前时间与起始时间的差值来计算,也就类似于如下

先在form2里加个变量

 DateTime beginTime = DateTime.Now;

//timer3的时间可以设小一点,比如100

private void timer3_Tick(object sender, EventArgs e)
{
    scss = 60 - (int)((DateTime.Now - beginTime).TotalSeconds);
    label1.Text = scss.ToString();
    if(scss<=0)
    {
        if (textBox1.Text.Trim() == "") this.Close();//如果到时为空就关闭
        else
        {
            timer3.Stop();
            //做其它的事
        }
    }
}

至于你上面的timer1和timer2,没看出有什么存在的必要

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一颗程序猿o_0
2016-11-18 · TA获得超过6296个赞
知道大有可为答主
回答量:5403
采纳率:77%
帮助的人:1318万
展开全部
建议你能合并就合并
另外timer会使用非UI线程进行操作, 不要在其处理函数中对控件直接进行操作, 要用控件的Invoke方法进行调用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式