我们想在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();
}
}
}
答案 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());
}