0

我有以下代码。这是一个带有单个文本框的表单。如果我myTimer_Tick不是静态的,那么它工作正常 - 为什么?

namespace Ariport_Parking
{
  public partial class AirportParking : Form
  {

    //instance variables of the form
    static Timer myTimer;


    public AirportParking()
    {
        InitializeComponent();
        keepingTime(5000);
        txtMessage.Text = "hello";
    }

    //method for keeping time
    public void keepingTime(int howlong) {

        myTimer = new Timer();
        myTimer.Enabled = true;
        myTimer.Tick += new EventHandler(myTimer_Tick);
        myTimer.Interval = howlong;

        myTimer.Start();

    }

    static void myTimer_Tick(Object myObject,EventArgs myEventArgs){
        myTimer.Stop();
        txtMessage.Text = "hello world";
    }

  }

}
4

2 回答 2

5

我认为错误是它无法访问 txtMessage。txtMessage 是在表单上声明的实例变量,静态方法无法访问表单的实例数据。你可以谷歌知道为什么。

于 2012-04-12T12:03:42.320 回答
1

因为 txtMessage 不是静态的,所以它需要类的实例才能被访问。您无需将 myTimer_Tick 和计时器设为静态。或者为了更好地使用 lambda 而不是 myTimer_Tick。

代替:

myTimer.Tick += new EventHandler(myTimer_Tick);

采用

myTimer.Tick += (sender, e) => { 
    myTimer.Stop();
    txtMessage.Text = "hello world";
};
于 2012-04-12T12:10:14.360 回答