我有以下代码:
public class AppDomainArgs : MarshalByRefObject {
public string myString;
}
static AppDomainArgs ada = new AppDomainArgs() { myString = "abc" };
static void Main(string[] args) {
AppDomain domain = AppDomain.CreateDomain("Domain666");
domain.DoCallBack(MyNewAppDomainMethod);
Console.WriteLine(ada.myString);
Console.ReadKey();
AppDomain.Unload(domain);
}
static void MyNewAppDomainMethod() {
ada.myString = "working!";
}
我认为这样做会让我的 ada.myString “工作!”在主应用程序域上,但事实并非如此。我认为通过继承 MarshalByRefObject 对第二个应用程序域所做的任何更改也会反映在原始应用程序域中(我认为这只是主应用程序域上真实对象的代理!)?
Thanks
您的代码中的问题是您从未真正将对象传递到边界上;因此你有two ada
实例,每个应用程序域中有一个(静态字段初始值设定项在两个应用程序域上运行)。您需要将实例传递到边界MarshalByRefObject
魔法启动。
例如:
using System;
class MyBoundaryObject : MarshalByRefObject {
public void SomeMethod(AppDomainArgs ada) {
Console.WriteLine(AppDomain.CurrentDomain.FriendlyName + "; executing");
ada.myString = "working!";
}
}
public class AppDomainArgs : MarshalByRefObject {
public string myString { get; set; }
}
static class Program {
static void Main() {
AppDomain domain = AppDomain.CreateDomain("Domain666");
MyBoundaryObject boundary = (MyBoundaryObject)
domain.CreateInstanceAndUnwrap(
typeof(MyBoundaryObject).Assembly.FullName,
typeof(MyBoundaryObject).FullName);
AppDomainArgs ada = new AppDomainArgs();
ada.myString = "abc";
Console.WriteLine("Before: " + ada.myString);
boundary.SomeMethod(ada);
Console.WriteLine("After: " + ada.myString);
Console.ReadKey();
AppDomain.Unload(domain);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)