Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从计时器事件访问主窗体_C#_Winforms - Fatal编程技术网

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;
}