Tag: 关闭

Closure捕获变量也会修改原始变量

我有以下简单的代码: static void Main(string[] args) { int j = 0; Func f = () => { for (int i = 0; i < 3; i++) { j += i; } return j; }; int myStr = f(); Console.WriteLine(myStr); Console.WriteLine(j); Console.Read(); } 根据我在涉及闭包时所读到的内容,编译器会创建一个新类型,以便它可以存储捕获的变量并维护对它的引用。 但是,当我运行以下代码时,两个打印行显示3.我期待0和3,因为匿名方法在生成的类中由编译器具有自己的变量。 那么它为什么还要修改外部变量呢?

linq匿名方法中的局部变量范围(闭包)

Linq Query中声明的局部变量的范围是什么。 我正在编写以下代码 static void Evaluate() { var listNumbers = Enumerable.Range(1, 10).Select(i => i); int i = 10; } 编译器标记错误在行int i = 10,说明 A local variable named ‘i’ cannot be declared in this scope because it would give a different meaning to ‘i’, which is already used in a ‘child’ scope to denote something else […]

Application.Current.Shutdown()与Application.Current.Dispatcher.BeginInvokeShutdown()

首先介绍一下:我有一个WPF应用程序,它是传统Win32应用程序的GUI前端。 遗留应用程序在单独的线程中作为DLL运行。 用户在UI中选择的命令在该“遗留线程”上被调用。 如果“遗留线程”结束,GUI前端不能再做任何有用的事了,所以我需要关闭WPF应用程序。 因此,在线程方法的最后,我调用Application.Current.Shutdown() 。 由于我不在主线程上,我需要调用此命令。 但是,我注意到Dispatcher也有BeginInvokeShutdown()来关闭调度程序。 所以我的问题是:调用之间有什么区别 Application.Current.Shutdown(); 并打电话 Application.Current.Dispatcher.BeginInvokeShutdown();