我需要調用另一個appdomain中的對象方法(傳遞參數並獲取結果)。想法?使跨應用程序域調用最簡單的方法?
UPD兩個AppDomain都不是由我的代碼創建的(主機應用程序創建它,然後我的代碼被調用)。我如何從另一個AppDomain訪問一個AppDomain?
我需要調用另一個appdomain中的對象方法(傳遞參數並獲取結果)。想法?使跨應用程序域調用最簡單的方法?
UPD兩個AppDomain都不是由我的代碼創建的(主機應用程序創建它,然後我的代碼被調用)。我如何從另一個AppDomain訪問一個AppDomain?
如果您在另一個域中創建了一個對象,例如與AppDomain.CreateInstanceAndUnwrap,所有你需要調用另一個域中的對象是調用一個對象的方法。
進行跨應用程序域調用的最簡單方法就是直接對該對象進行調用,該對象實際上是通過其另一個域中存在的另一個域通過其代理公開的。
UPD
不幸的是,獲得主機域並不那麼容易。您應該枚舉像this這樣的域名,並在其中找到主機域名。我想你的主機域是方法AppDomain.IsDefaultAppDomain
返回真正的。
這通常使用AppDomain.DoCallBack來實現。您需要確保如果您想傳遞參數,則需要創建一個可序列化的對象,該對象的方法將傳遞給上述方法。 在回調方法中,您可以執行另一個AppDomain回調以將結果傳遞迴原始AppDomain。
我看不到,如何傳遞參數/結果。 – user626528 2011-06-05 11:41:33
@ user626528您無法直接傳遞參數或獲取結果。你可以做的是你可以使用[SetData](http://msdn.microsoft.com/en-us/library/system.appdomain.setdata.aspx)和[GetData](http://msdn.microsoft.com /en-us/library/system.appdomain.getdata.aspx)您的應用程序域的方法。 – Prasad 2013-02-04 11:28:01
我完全忘記了這種方法。其實比使用DoCallBack更方便;) – 2011-06-05 12:42:23
不錯!是否有可能使用這種方式進行回調? – user626528 2011-06-05 13:08:22
@ user626528是的,但不僅僅是對象的一種方法的回調。如果您在另一個域中創建對象,則在該域中調用其所有方法。我想你應該創建一些將負責你的回調的類,然後通過AppDomain.CreateInstanceAndUnwrap在另一個域中創建該類的一個實例,最後在另一個域的實例上調用該方法。 – Centro 2011-06-05 13:25:03