C#应用程序域和线程
我提了一个小问题,让我彻夜未眠。也许这很容易理解,但我还不能 哪个更好?线程中的AppDomain,还是新AppDomain中的线程 那么,这两者之间的区别是什么呢C#应用程序域和线程,c#,multithreading,marshalling,appdomain,C#,Multithreading,Marshalling,Appdomain,我提了一个小问题,让我彻夜未眠。也许这很容易理解,但我还不能 哪个更好?线程中的AppDomain,还是新AppDomain中的线程 那么,这两者之间的区别是什么呢 static void Main() { AppDomain ad = AppDomain.CreateDomain ("NewDomain"); Thread t = new Thread (delegate() { ad.DoCallBack (SomeMethod); }); t.Start(); }
static void Main() {
AppDomain ad = AppDomain.CreateDomain ("NewDomain");
Thread t = new Thread (delegate() { ad.DoCallBack (SomeMethod); });
t.Start();
}
static void SomeMethod() { }
以及:
上面的代码片段正在一个从MBRO继承的类中执行,以创建一个远程实例并调用包含该代码的方法。我想冒险说,一旦代码在一个新的应用程序域中执行,无论哪种方式都没有什么不同 问题是跨到另一个应用程序域,这可能需要序列化/编组传递/返回到新应用程序域的对象(如果它支持的话)。避开此类代码(任何一个示例)。除非你喜欢花上几个星期到处调试奇怪的异常,否则这会让你的生活陷入地狱
面对根本问题-优雅地关闭远程作业。通常有很多方法可以做到这一点,包括取消或终止它的不同方法,但是调用脏黑客
线程.Abort()
是一件坏事 动机是什么?你想达到什么目的?嗨!主要目标是通过WCF interprocess在两个应用程序域之间进行通信。这已经完成了,但是我还没有找到一个好方法来关闭客户端,而不是中止线程。所以我一直在研究,也许最好有一个远程处理类来控制和执行方法,或者控制保存新appdomain的线程。也许这种方法是错误的。所以,我一直在研究。谢谢你的关注。嗨!我已经在封送对象,我需要它调用初始化客户端的方法。然而,我仍然想知道wich可能是关闭客户端的最佳方式。谢谢你的关注。嗨!我同意,不管是软件还是人,堕胎都不是最好的方式。我已经考虑过关闭客户端,并向正在创建和打开通道的类发送一个事件。让我们看看这是否有效。感谢您的关注。@BlackCath也许可以查看任务
类,它支持取消,或者在另一个问题中发布您的客户机-服务器代码,看看人们认为最好的方法是什么。
public void Start() {
myAssembly = Assembly.LoadFrom(dllFileName);
Type myType = AssEnsamblado.GetType(myAseembly.Type);
MethodInfo myMethod = tipo.GetMethod(@"StartDLL");
object obj = Activator.CreateInstance(myType);
Thread thrBase = new Thread(new ThreadStart(delegate() { myMethod.Invoke(obj, null); }));
thrBase.Start();
}