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#:将参数传递给多个System.Timer.Timer,当参数更改时,所有计时器都会更改_C#_Timer - Fatal编程技术网

C#:将参数传递给多个System.Timer.Timer,当参数更改时,所有计时器都会更改

C#:将参数传递给多个System.Timer.Timer,当参数更改时,所有计时器都会更改,c#,timer,C#,Timer,我试图在下面的代码中传递参数multiple System.Timers.Timer,并期望结果是由“1”和“2”组成的序列。但结果是“2,2,2…” 然后我将代码修改为下面的代码,然后我开始工作。谁能给我解释一下吗。非常感谢 private static void tmer(object sender, EventArgs e, int i) { Console.WriteLine(i + " called."); } public static

我试图在下面的代码中传递参数multiple System.Timers.Timer,并期望结果是由“1”和“2”组成的序列。但结果是“2,2,2…”

然后我将代码修改为下面的代码,然后我开始工作。谁能给我解释一下吗。非常感谢

    private static void tmer(object sender, EventArgs e, int i)
    {
        Console.WriteLine(i + " called.");
    }
    public static void Main(string[] args)
    {
        int x = 1;
        Timer tm1 = new Timer(1000);
        tm1.Elapsed += (sender, e) => tmer(sender, e, x);
        tm1.Enabled = true;

        Timer tm2 = new Timer(1000);
        tm2.Elapsed += (sender, e) => tmer(sender, e, 2);
        tm2.Enabled = true;
    }

我认为在您的第一个代码中,x++是在调用tmer函数之前执行的。
因此,使用2作为x的值来调用tmer函数。

您得到了结果2,2,因为当触发经过的事件时,执行
tmer(sender,e,x)
,此时x的值为2。

关于第一个计时器,当触发经过的事件时,x=2,这被捕获


尝试将x复制到一个仅存在于lambda范围内的变量中,并使用该副本。

实际上,它与计时器无关。lambda捕获变量,而不是创建lambda时恰好包含的值。
    private static void tmer(object sender, EventArgs e, int i)
    {
        Console.WriteLine(i + " called.");
    }
    public static void Main(string[] args)
    {
        int x = 1;
        Timer tm1 = new Timer(1000);
        tm1.Elapsed += (sender, e) => tmer(sender, e, x);
        tm1.Enabled = true;

        Timer tm2 = new Timer(1000);
        tm2.Elapsed += (sender, e) => tmer(sender, e, 2);
        tm2.Enabled = true;
    }