我正在创建一个
System.Timers.Timer aTimer = new System.Timers.Timer();
并希望从
访问主窗体或Form1private static void OnTimedEvent(object source, ElapsedEventArgs e)
{...}
事件,我该怎么做?我无法通过谷歌在线找到这样做的例子。我正在绘制一些图形,并希望在计时器事件触发时更改它们。我不能使用表单计时器,因为我想将此代码移植到其他地方并且它将无法使用。
由于
答案 0 :(得分:0)
我不太喜欢以下代码,但是如果你找不到另一种方法来获取对你的Form1
实例的引用,你可以通过Application.OpenForms
尝试:< / p>
// using System.Linq;
// using System.Windows.Forms;
Form1 mainForm = Application.OpenForms.OfType<Form1>().SingleOrDefault();
答案 1 :(得分:0)
如果问题是如何从计时器中的Form1访问方法,但它是在一个单独的类中,那么你可以做的是将Form1的引用传递给包含计时器的类。在类范围中声明一个变量:
Form1 mainForm;
重要的是你不要在这里实例化它。然后创建一个这样的方法:
public void PassReference(Form1 form1)
{
this.mainForm = form1;
}
现在,从MainForm调用PassReference后,您将可以访问Form1中的所有公共方法。
答案 2 :(得分:0)
我希望计时器也在MainForm中。在这种情况下,您可以使用'this'。
this
- 是MainForm
答案 3 :(得分:0)
您的事件被声明为静态但时间本身不是。
如果您必须有静态事件,请同时保留对表单的静态引用,并在您的计时器事件中使用该引用。