剪贴板不适用于从 aync 调用 Silverlight 返回的结果

本文关键字:Silverlight 返回 结果 调用 aync 不适用 适用于 剪贴板 | 更新日期: 2023-09-27 18:37:21

我需要在剪贴板中异步设置从 WCF 服务返回的一些文本。剪贴板类的问题在于它的线程安全,因此在设置从服务返回的文本时,它会生成安全异常 - "不允许剪贴板访问",我无法将我的文本复制到剪贴板。

任何人都可以提出解决方案..

剪贴板不适用于从 aync 调用 Silverlight 返回的结果

根据剪贴板文档

这里

在部分信任中(浏览器托管的默认模式) 基于Silverlight的应用程序),Silverlight还限制剪贴板 访问其两个关键API:GetText和SetText。这些 API 只能是 从由 Silverlight 确定的上下文中调用 运行时响应用户启动的操作。例如 剪贴板访问在单击或按下的处理程序中有效 事件。相反,剪贴板访问从处理程序无效 加载或来自构造函数,访问尝试引发异常。

此外,Silverlight 会提示用户确认 在部分信任下访问剪贴板。这银光 访问确认对话框在每个会话中显示一次。如果 您专门生成了浏览器外应用程序和请求 提升的信任,对 API 及其对话框的此安全限制 框不使用。

也就是说,这是针对此限制的建议解决方案。

从服务返回数据时,应将其存储在变量中,并向用户显示一个按钮,用于单击数据随后复制到剪贴板的位置。

string data = "";
...
void LoadDataAsync() {        
    //Service call populates variable.
    //When service call completes Button is enabled allowing user to click
}   
...
private void OnButtonClick(object sender, System.Windows.RoutedEventArgs e) {
    System.Windows.Clipboard.SetText(data);
}

当服务完成时,您可以向用户显示一个对话框,通知用户下载已完成,并询问他们要将数据复制到剪贴板的 ID。这将为您提供允许剪贴板工作所需的用户启动的操作。