我的问题非常相似,如果不是这个的复制品的话。令人恼火的是,“答案”并没有给我很多工作,坦率地说,我处于一个松散的结局。
问题应该是相当明显的。我想在可插入应用程序框架的进程之间传递 WPF 元素,而不必使用托管插件框架。我部署到一个环境,由于高度限制性的权限,将文件缓存到我无法控制的磁盘是不可接受的。这些是解决方法 - 将插件根放在 appdata 中 - 但强制执行的目录结构是不可取的,据我所知,这不是该文件夹的用途。
异常方法如下,异常行以粗体突出显示:
委托无效 AddUIElementDelegate(客户端客户端,System.AddIn.Contract.INativeHandleContract 句柄); private void AddUIElement(客户端客户端,System.AddIn.Contract.INativeHandleContract 句柄) { if (this.Dispatcher.CheckAccess()) { var element = System.AddIn.Pipeline.FrameworkElementAdapters.ContractToViewAdapter(handle); m_UIElements[客户端] = 元素; StackPanel_PluginUIHost.Children.Add(m_UIElements[client]); } 别的 { this.Dispatcher.BeginInvoke(new AddUIElementDelegate(AddUIElement), 客户端, 句柄); } }
实验似乎需要通过STA 线程上的FrameworkElementAdapters.ContractToViewAdapter()解组句柄 ,因此需要调用。需要注意的是,client是一个回调MarshalByRefObject,在这个方法中是通过代理访问的。句柄也是通过调用FrameworkElementAdapters.ViewToContractAdapter()远程创建的,并作为远程方法的返回值传递到此应用程序域。
我收到的异常是发生了 RemotingException - 权限被拒绝:无法远程调用非公共或静态方法。
欢迎任何反馈。