Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#应用程序域和线程_C#_Multithreading_Marshalling_Appdomain - Fatal编程技术网

C#应用程序域和线程

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

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

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

那么,这两者之间的区别是什么呢

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