C# 内部方法变量范围

C# 内部方法变量范围,c#,.net,C#,.net,事件处理程序返回后,变量uiContext是否会退出作用域?编译器在幕后做了什么来让代码工作 private void findButton_Click(object sender, RoutedEventArgs e) { SynchronizationContext uiContext = SynchronizationContext.Current; Task.Factory.StartNew(() => { string pictures

事件处理程序返回后,变量uiContext是否会退出作用域?编译器在幕后做了什么来让代码工作

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
将被垃圾收集。更确切地说,它将为垃圾收集做好准备。