1

考虑以下场景:

应用域 1:

public delegate bool Delegate1(class1 c1,string p);

 class class1
  {
    public bool method1(Delegate1 d, out IEnumerable<string> partNumbers)
      {
      //Method body
       }
    }

AppDoamin2:

class x
 {
  public bool method2(Dictionary<string,string> x,out string[] returnValues)
   {
    class1Instance.method1(delegate(class1 cc,string pp){if(x.Key=="blaah") return False;},out temp);

    }
  }

IronPython 脚本:调用方法 2。

这种方法给出了序列化异常,因为 appDomain2 中的委托正在使用堆栈中的变量。

可能的解决方案:将 Ironpython 脚本中的委托方法传递给 appDomain2 中的方法,该方法在 Appdomain3 中传递。

问题:如何做到这一点?到目前为止,无法在此搜索任何内容。

注意:使用 .NET Framework 2 和 ironpython 2.7.1。

PS对不起格式不好!

4

1 回答 1

1

找到了答案。通常情况下,答案是甜蜜而简单的!

因此创建了一个小型辅助类,它封装了整个委托实现、成员变量等。该类的构造函数接受必要的参数(这导致无法序列化委托的问题)。以下是我编写的小型辅助类-

public sealed class DevCatalogFilterHelper : MarshalByRefObject
{
    Dictionary<string, string> m_resourceNameValuePair;

    public DevCatalogFilterHelper(Dictionary<string, string> resourceNameValuePair)
    {
        this.m_resourceNameValuePair = resourceNameValuePair;
    }

    public  bool FilterDelegate(class1 devCat,string partNumber)
    {
        foreach (KeyValuePair<string, string> kvp in m_resourceNameValuePair)
        {
            string value;
           //if(condition){helpFull code return false;}
        }
        return true;
    }
}
于 2012-07-11T11:44:04.287 回答