使用C#中的form1在program.cs中创建一个静态计时器

时间:2014-06-28 15:38:46

标签: c# winforms timer

我们想在static void Main()方法中创建一个计时器,这个计时器将有事件处理程序aTimer_Elapsed。在事件处理程序每​​次触发事件处理程序时都会有此语句Number = Number+1;,此数字将在静态void Main()程序中添加1。

有一个form1,它会有一个按钮,可以从static void Main()程序中检索数字的值,然后显示在textbox1.Text

根据我的理解,这应该有效,但是当开始调试程序时,通过按form1上的按钮,textbox1.Text上没有值更新(*它只有默认值值“0”)。

然后我们才意识到计时器的事件处理程序没有被触发。这是我不明白的地方,或许你的专业知识可以与我们分享,这将如何发生以及如何解决这个问题。

以下是program.cs代码。

    static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            public static int Number = 0;
            static System.Timers.Timer aTimer;
            /// 
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());

                aTimer = new System.Timers.Timer(1000);
                aTimer.Elapsed += aTimer_Elapsed;
                aTimer.Interval = 1000;
                aTimer.Enabled = true;
            }

            static void aTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                //throw new NotImplementedException();
                Number = Number + 1;

            }
        }

from1.c [Design]代码如下:

namespace WindowsFormsApplication_with_Main_Prg
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = Program.Number.ToString();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

当您使用阻止代码调用Application.Run(new Form1());

时,计时器事件永远不会被触发

您应该将代码更改为以下内容:

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    aTimer = new System.Timers.Timer(1000);
    aTimer.Elapsed += aTimer_Elapsed;
    aTimer.Interval = 1000;
    aTimer.Enabled = true;
    Application.Run(new Form1());  
}