access to modified closure 闭包的问题

 for (int i = 0; i < listBoxDevices.Items.Count; i++)
                {
                    var tempDeviceId = listBoxDevices.Items[i].ToString();
                    if (tempDeviceId.Contains("(掉线)"))
                    {
                        var id = GlobalConvert.GetDeviceID(tempDeviceId.Replace("(掉线)", string.Empty));
                        if (id == reonlineId)
                        {
                            listBoxDevices.Invoke((MethodInvoker)delegate
                            {
                                try
                                {
                                    listBoxDevices.Items[i] = GlobalConvert.GetDeviceID(reonlineId);
                                }
                                catch (Exception ex)
                                {
                                    ExceptionLog.Instance.WriteLog(ex, LogType.UI);
                                }
                            });
                        }
                    }
                }

代码里面有一个for循环

循环内部调用了匿名委托

模拟了一下:

但是下面这段代码的执行,不会出现问题是正常的

  private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(Closure);
            thread.IsBackground = true;
            thread.Start();
        }

        private void Closure()
        {
            for (int i = 0; i < 10; i++)
            {
                this.Invoke((MethodInvoker) delegate
                {
                    textBox1.AppendText(string.Format("{0}:{1}{2}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), i, Environment.NewLine));
                });
            }
        }

References:

http://stackoverflow.com/questions/595482/what-are-closures-in-c

closure in C# takes the form of an in-line delegate/anonymous method.

closure is attached to its parent method meaning that variables defined in parent‘s method body can be referenced from within the anonymous method.

http://csharpindepth.com/Articles/Chapter5/Closures.aspx

时间: 2024-10-04 19:52:01

access to modified closure 闭包的问题的相关文章

java 8 closure 闭包

在functional programming 里面经常提及closure 闭包. 那么究竟闭包是一个什么东东? 让人如何难以理解呢? 1 闭包定义 closure is an instance of a function that can reference nonlocal variables of that function with no restrictions.这是闭包的英文定义.说实在这段定义确实很抽象让人难以理解. 然后我这里其实有两个点把这段定义具体化: 1.1. 闭包就是允许

javascript Closure 闭包

引用自 http://www.cnblogs.com/mguo/archive/2013/06/19/3143880.html /*一.变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量.*/ var n=999; function f1(){ alert(n); } f1(); // 999//另一方面,在函数外部自然无法读取函数内的局部变量. funct

【Javascript 拾遗之三】 Closure 闭包

说起闭包这个概念,其实是离散数学中的一种定义,而很程序员们耳熟能详但不一定能说清楚它的含义和用途.本文先简单地介绍下离散数学中的闭包,然后再探讨一下Javascript语言中的闭包是如何创建和应用的. Closure 闭包 1.闭包的定义 -离散数学 一个关系不具有自反, 对称, 传递这3种基本性质之一,但均可以通过对该关系的扩充(在关系中增添序偶),使扩充后的关系具有这种性质,这种包含该关系的最小扩充称为该关系关于这种性质的闭包. 下面给出闭包的定义:设R是X上的关系,R的自反(或对称,传递)

PHP Closure(闭包)类详解

Closure 面向对象变成语言代码的复用主要采用继承来实现,而函数的复用,就是通过闭包来实现.这就是闭包的设计初衷. 注:PHP里面闭包函数是为了复用函数而设计的语言特性,如果在闭包函数里面访问指定域的变量,使用use关键字来实现. PHP具有面向函数的编程特性,但是也是面向对象编程语言,PHP 会自动把闭包函数转换成内置类 Closure 的对象实例,依赖Closure 的对象实例又给闭包函数添加了更多的能力. 闭包不能被实例(私有构造函数),也不能被继承(finally 类).可以通过反射

ES3之closure ( 闭包 )

闭包是函数和声明该函数的词法环境的组合. JavaScript中的函数会形成闭包. 闭包是由函数以及创建该函数的词法环境组合而成.这个环境包含了这个闭包创建时所能访问的所有局部变量. function playGame(){ var name = 'Ace Combat'; function playGame_(){ console.log('[play game]',name); } return playGame_; } var play = playGame(); play(); 创建多个

modern php closure 闭包

* 在array_map()函数中使用闭包 <?php $numbersPlusOne = array_map(function($number) { return $number + 1; }, [1,2,3]); print_r($numbersPlusOne); $ php numbersPlusOne.php Array( [0] => 2 [1] => 3 [2] => 4) * 使用use关键字附加闭包的状态 <?php function enclosePerso

说说委托那些事儿

委托基础 委托是个啥? 很多人第一反映可能是"函数指针",个人觉得"函数指针"是委托实例 委托的定义类似interface,是一种方法的"规范"或者说"模版",用来规范方法的"行为",以便将方法作为参数传递 public delegate void MyDelegate(); 这样便定义了一个无参无返回值的委托,要求此委托的实例必须是无参无返回值的方法 public class MyClass { publ

MapReduce的C#实现及单元测试(试验)

MapReduce.cs类文件代码  MapReduce的执行方法 using System; using System.Collections.Generic; //using System.Linq; //using System.Threading.Tasks; namespace MapReduce { /// <summary> /// Very Simple MapReduce implementation in C# /// </summary> /// <re

Python进阶之[非局部变量,闭包,装饰器]

阅读Tacotron2源码 之 Python进阶 Non-Local Variable with Nested Function Closure in Python Decorator 1. Non-Local Variable with Nested Function ????在Python中,除了全局变量(Global Variable)和局部变量(Local Variable)之外,还有一种变量叫Non-Local Variable. ????Non-Local Variable的存在来源