Passing values back and forth appdomains

后端 未结 1 537
一向
一向 2021-01-02 05:45

I have the following code:

    public class AppDomainArgs : MarshalByRefObject {
        public string myString;
    }

    static AppDomainArgs ada = new Ap         


        
相关标签:
1条回答
  • 2021-01-02 06:32

    The problem in your code is that you never actually pass the object over the boundary; thus you have two ada instances, one in each app-domain (the static field initializer runs on both app-domains). You will need to pass the instance over the boundary for the MarshalByRefObject magic to kick in.

    For example:

    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);
         }
    }
    
    0 讨论(0)
提交回复
热议问题