0

我正在创建一个

System.Timers.Timer aTimer = new System.Timers.Timer();

并希望从

private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {...}

事件,我该怎么做?我无法通过谷歌在网上找到一个这样做的例子。我正在绘制一些图形,并希望在计时器事件触发时更改它们。我不能使用表单计时器,因为我想将此代码移植到其他东西并且它将不可用。

谢谢

4

4 回答 4

0

我不太喜欢下面的代码,但是如果您找不到另一种方法将您的Form1实例引用到事件处理程序中,您可以通过以下方式尝试Application.OpenForms

// using System.Linq;
// using System.Windows.Forms; 

Form1 mainForm = Application.OpenForms.OfType<Form1>().SingleOrDefault();
于 2012-05-07T21:27:14.723 回答
0

如果问题是如何从计时器中的 Form1 访问方法,但它位于单独的类中,那么您可以做的是将 Form1 的引用传递给包含计时器的类。在类范围内声明一个变量:

Form1 mainForm;

重要的是不要在这里实例化它。然后创建一个这样的方法:

public void PassReference(Form1 form1)
{
   this.mainForm = form1;
}

现在,在您从 MainForm 调用 PassReference 之后,您将可以访问 Form1 中的所有公共方法。

于 2012-05-07T21:32:31.163 回答
0

我希望计时器也在 MainForm 中。在这种情况下,您可以使用“this”。

this- 是主窗体

于 2012-05-09T02:36:43.650 回答
0

您的事件被声明为静态,但时间本身不是。

如果您必须有一个静态事件,请保留对表单的静态引用,并在计时器事件中使用该引用。

于 2012-05-09T02:40:36.457 回答