-1

好的,这是代码的重要部分:

public bool open = false;

//CODE FOR CALLING VOID "EverySecond"
var DT = new System.Timers.Timer();     //Yes i am using System.Timers
DT.Elapsed += new ElapsedEventHandler(EverySecond);
DT.Interval = 1000;
/*
    SOME CODE CHANGING SOME UNIMPORTANT TEXTBOXES
*/
DT.Start();

private void EverySecond(object source, ElapsedEventArgs e)
{
    if (pb1.Value < 100)
        pb1.Value += 1;
    sl -= 1;
    tbTime.Text = "Estimated " + sl.ToString() + " seconds left";
    if (pb1.Value >= 100)
        pb1.Value = 100;
    if (pb1.Value == 100 && open == false)
    {
        Form frm6 = new frm6();
        frm6.Show();
        this.Close();
    }
}

所以基本上每次我运行这个所有代码都运行良好,但后来我来到这段代码(如果(pb1.Value == 100 && open == false)),整个程序冻结并输出1秒(由于脚本的当前配置是合乎逻辑的)但是我已经尝试了一百万种不同的方法,它的作用有些相同,它只是向我显示沙漏光标,所有按钮和文本框都放错了位置,进度条消失了,它只是一团糟。

4

1 回答 1

0

我解决了,您需要使用常规的 Forms.Timer,并将“Timer.Elapsed”替换为“Timer.Tick”,并从“ElapsedEventHandler”和“ElapsedEventArgs”中删除“Elapsed”,如下所示:

public bool open = false;

//CODE FOR CALLING VOID "EverySecond"
Timer DT = new Timer();
DT.Tick += new EventHandler(EverySecond);
DT.Interval = 1000;
/*
    SOME CODE CHANGING SOME UNIMPORTANT TEXTBOXES
*/
DT.Start();

private void EverySecond(object source, EventArgs e)
{
    if (pb1.Value < 100)
        pb1.Value += 1;
    sl -= 1;
    tbTime.Text = "Estimated " + sl.ToString() + " seconds left";
    if (pb1.Value >= 100)
        pb1.Value = 100;
    if (pb1.Value == 100 && open == false)
    {
        Form frm6 = new frm6();
        frm6.Show();
        this.Close();
    }
}
于 2020-09-29T18:51:40.550 回答