C# 应用程序域和线程

问题描述 投票:0回答:2

我带来了一个让我彻夜难眠的小问题。也许这很容易理解,但我还不能。

哪个更好?线程内的 AppDomain,还是新 AppDomain 内的线程?

那么这两者有什么区别:

static void Main() {
    AppDomain ad = AppDomain.CreateDomain ("NewDomain");
    Thread t = new Thread (delegate() { ad.DoCallBack (SomeMethod); });
    t.Start();
}

static void SomeMethod() { }

并且:

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();
}

上面的代码片段在继承自 MBRO 的类中执行,以创建远程实例并调用包含该代码的方法。

c# multithreading marshalling appdomain
2个回答
0
投票

我会冒险说,一旦你的代码在新的应用程序域中执行,无论哪种方式都没有什么区别。

问题是跨越到其他应用程序域,这可能需要对传递/返回到新应用程序域的对象进行序列化/编组(如果支持)。


0
投票

远离此类代码(任一示例)。这会让你的生活变得一团糟,除非你喜欢花几周的时间到处调试奇怪的异常。

面对root问题 - 优雅地关闭远程作业。通常有很多方法可以做到这一点,包括取消或终止它的不同方法,但调用肮脏的黑客

Thread.Abort()
只是邪恶的。

© www.soinside.com 2019 - 2024. All rights reserved.