我一直在試圖讓下面的代碼工作(一切都在同一程序中定義):如何將引用作爲跨應用程序域的方法參數傳遞?
namespace SomeApp{
public class A : MarshalByRefObject
{
public byte[] GetSomeData() { // }
}
public class B : MarshalByRefObject
{
private A remoteObj;
public void SetA(A remoteObj)
{
this.remoteObj = remoteObj;
}
}
public class C
{
A someA = new A();
public void Init()
{
AppDomain domain = AppDomain.CreateDomain("ChildDomain");
string currentAssemblyPath = Assembly.GetExecutingAssembly().Location;
B remoteB = domain.domain.CreateInstanceFromAndUnwrap(currentAssemblyPath,"SomeApp.B") as B;
remoteB.SetA(someA); // this throws an ArgumentException "Object type cannot be converted to target type."
}
}
}
我試圖做的是傳中,創造了一個「A」的實例的引用第一個AppDomain添加到子域,並讓子域在第一個域上執行一個方法。在'B'代碼的某一點上,我將調用'remoteObj.GetSomeData()'。必須這樣做,因爲來自'GetSomeData'方法的'byte []'必須在第一個appdomain上'計算'。 我該怎麼做才能避免這種異常,或者我能做些什麼來達到相同的結果?
你的代碼適合我。 – 2010-05-28 20:46:55
+1對我來說也是。什麼版本的CLR,Visual Studio(如果有),C#等?任何其他情況? – 2010-05-28 20:53:19
奇怪,我要再次檢查 – 2010-05-28 20:56:04