C# 内部方法变量范围
事件处理程序返回后,变量uiContext是否会退出作用域?编译器在幕后做了什么来让代码工作C# 内部方法变量范围,c#,.net,C#,.net,事件处理程序返回后,变量uiContext是否会退出作用域?编译器在幕后做了什么来让代码工作 private void findButton_Click(object sender, RoutedEventArgs e) { SynchronizationContext uiContext = SynchronizationContext.Current; Task.Factory.StartNew(() => { string pictures
private void findButton_Click(object sender, RoutedEventArgs e)
{
SynchronizationContext uiContext = SynchronizationContext.Current;
Task.Factory.StartNew(() =>
{
string pictures =
Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
var folder = new DirectoryInfo(pictures);
FileInfo[] allFiles =
folder.GetFiles("*.jpg", SearchOption.AllDirectories);
FileInfo largest =
allFiles.OrderByDescending(f => f.Length).FirstOrDefault();
uiContext.Post(unusedArg =>
{
outputTextBox.Text = string.Format("Largest file ({0}MB) is {1}",
largest.Length / (1024 * 1024), largest.FullName);
},
null);
});
}
.NET使用闭包来防止垃圾收集器在内部方法、操作等仍然需要时删除
uiContext
(此处Task.Factory.StartNew
)
见:
此外,
SynchronizationContext
是一个类,当您使用Current
属性时,您不知道是创建了新实例,还是返回了现有实例。因此,您可能不是唯一一个引用该实例的人。.NET使用闭包来防止垃圾收集器在内部方法、操作等仍然需要时删除uiContext
(此处Task.Factory.StartNew
)
见:
此外,
SynchronizationContext
是一个类,当您使用Current
属性时,您不知道是创建了新实例,还是返回了现有实例。因此,您可能不是唯一一个引用该实例的人。您对垃圾收集了解多少?当没有代码部分引用对象时,对象被垃圾收集。这意味着当线程和方法都退出时,uiContext
将被垃圾收集。更确切地说,它将为垃圾收集做好准备。您对垃圾收集了解多少?当没有代码部分引用对象时,对象将被垃圾收集。这意味着当线程和方法都退出时,uiContext
将被垃圾收集。更确切地说,它将为垃圾收集做好准备。