使用Delegates时范围结束时为什么不会丢弃对象

时间:2015-07-08 08:39:57

标签: c# .net delegates

我遇到了一个奇怪的情况,即在范围结束后代表的执行仍在继续。我最后也使用了GC.collect(),但即使它没有用完。

我正在使用与硒有关的东西,这种东西一直持续到最后,但你可以打印数量。

在这里,我想知道为什么即使它超出范围,它仍然继续执行代码的原因。 这里我的意思是automationActions,delAutomationAction超出了范围

class OptimixAutomation
{
    public delegate void DelAutomationAction(ExeActions actionId);
    static void Main(string[] args)
    {
        int numberOfInstances = Convert.ToInt32(ConfigurationManager.AppSettings["NumberOfInstances"]);
        ExeActions actionId = (ExeActions)Convert.ToInt32(ConfigurationManager.AppSettings["ActionId"]);
        for (int i = 0; i < numberOfInstances; i++)
        {
            AutomationActions automationActions = new AutomationActions();
            DelAutomationAction delAutomationAction = new DelAutomationAction(automationActions.Login);       
            try
            {
                delAutomationAction.BeginInvoke(actionId: actionId, callback: null, @object: null);
            }
            catch (Exception e)
            {

            }
            Thread.Sleep(10000);
        }
        Console.ReadKey();
    }
}

1 个答案:

答案 0 :(得分:-1)

AutomationActions automationActions = new AutomationActions(); DelAutomationAction delAutomationAction = new DelAutomationAction(automationActions.Login); - 这一行。如您所见,DelAutomationAction引用了automationActions。因为DelAutomationAction是异步执行的,所以它仍处于“范围”中。并且因为GC可以从“delAutomationAction”进入“automationActions”,所以第一个对象将不会被删除(并被处置)。