AppDomain.Unload问题

时间:2011-07-06 15:04:31

标签: c# appdomain

当我调用AppDomain.Unload(name)方法时appdomain是否卸载。或者它标志着下一个垃圾收集。 我有以下情况 AppDomains的集合。 ListApp 从ListApp卸载特定域名d1 卸载后立即再次创建域d1并将其添加到ListApp中 当我使用d1.CreateInstanceAndUnwrap()方法时,它会抛出异常“试图访问已卸载的appdomain”

public static IDictionary<object, AppDomain> LoadedDomains { get; internal set; }

private static void Load(object key)
{
    if (!LoadedDomains.Contains(key))
    {
        AppDomain domain = AppDomain.CreateDomain("t");
        LoadedDomains.Add(key, domain);
    }
}

private static void UnLoad(object key)
{
    if (LoadedDomains.Contains(key))
    {
        AppDomain.Unload(LoadedDomains(key));
        LoadedDomains.Remove(key);
    }
}

private static void Execute()
{
    object key = new object();
    Load(key);
    Unload(key);
    Load(key);
    MyObject myobj= LoadedDomains[key].CreateInstance("asName", "type");
}

2 个答案:

答案 0 :(得分:1)

听起来你正在描述一个多线程问题,而不是垃圾收集问题 - 因为你的代码在卸载后尝试访问域,但是在创建新域并将其分配给域之前变量。

同步卸载会卸载有问题的AppDomain,如果无法卸载域,则会抛出异常。

需要更多代码才能进一步提供帮助......

答案 1 :(得分:0)

我在我的代码中发现了问题。 卸载域而不刷新字典。