C# 从计时器事件访问主窗体
我正在创建一个C# 从计时器事件访问主窗体,c#,winforms,C#,Winforms,我正在创建一个 System.Timers.Timer aTimer = new System.Timers.Timer(); 并希望访问主窗体,或从 private static void OnTimedEvent(object source, ElapsedEventArgs e) {...} 事件,我该怎么做?我在网上找不到这样的例子,通过谷歌。我正在绘制一些图形,并希望在计时器事件触发时更改它们。我无法使用表单计时器,因为我想将此代码移植到其他内容,它将不可用 谢谢我不太喜欢
System.Timers.Timer aTimer = new System.Timers.Timer();
并希望访问主窗体,或从
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{...}
事件,我该怎么做?我在网上找不到这样的例子,通过谷歌。我正在绘制一些图形,并希望在计时器事件触发时更改它们。我无法使用表单计时器,因为我想将此代码移植到其他内容,它将不可用
谢谢我不太喜欢下面的代码,但是如果您无法找到另一种方法将对
Form1
实例的引用获取到事件处理程序中,您可以通过以下途径进行尝试:
//使用System.Linq;
//使用System.Windows.Forms;
Form1 mainForm=Application.OpenForms.OfType().SingleOrDefault();
如果问题是如何从计时器中的Form1访问方法,但它位于单独的类中,那么您可以做的是将Form1的引用传递给包含计时器的类。在类范围中声明变量:
Form1 mainForm;
重要的是不要在这里实例化它。然后创建如下方法:
public void PassReference(Form1 form1)
{
this.mainForm = form1;
}
现在,从MainForm调用PassReference后,您将可以访问Form1中的所有公共方法。我希望计时器也在MainForm中。在这种情况下,您可以使用“this”
此
-是主窗体您的事件声明为静态,但时间本身不是
如果必须有静态事件,请保留对窗体的静态引用,并从计时器事件中使用该引用。计时器相对于窗体1的位置,以及“访问主窗体”的确切含义。您不知道如何创建和启用计时器,还是不知道如何实例化对象?
public void PassReference(Form1 form1)
{
this.mainForm = form1;
}