当我调用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");
}
答案 0 :(得分:1)
听起来你正在描述一个多线程问题,而不是垃圾收集问题 - 因为你的代码在卸载后尝试访问域,但是在创建新域并将其分配给域之前变量。
同步卸载会卸载有问题的AppDomain,如果无法卸载域,则会抛出异常。
需要更多代码才能进一步提供帮助......
答案 1 :(得分:0)
我在我的代码中发现了问题。 卸载域而不刷新字典。