LINQ和Clipboard安全性的问题

uza*_*y95 -4 c# linq silverlight clipboard

为什么我需要在LINQ查询上调用ToList()方法?

例如:

private void btnEnc_Click(object sender, RoutedEventArgs e)
{
    SHA1 sha = new SHA1Managed();
    string sResult = "";

    var v = sha.ComputeHash(
        UTF8Encoding.Unicode.GetBytes(tbxWordToEncrypt.Text)
        ).Select(
            p => sResult += string.Format("{0:x2}", p)
        ).ToList();

    Clipboard.SetText(sResult);

    tbxEncrypted.Text = sResult;
}
Run Code Online (Sandbox Code Playgroud)

此外,当我尝试访问剪贴板时,我得到一个安全对话框.我怎么能阻止这个?

SilverLight ClipBoard访问MessageBox

Chr*_*ers 5

默认情况下,您在部分信任下运行.当调用ClipBoard.SetText()(或ClipBoard.SetText(...))时,用户必须确认访问权限.

如果您创建了一个浏览器外应用程序并请求提升信任,则此限制将不再适用,并且不会显示任何对话框.

您可以将应用程序配置为需要提升信任.您需要在应用程序的清单中设置它.

有关更多信息,请查看MSDN:

http://msdn.microsoft.com/en-us/library/ee721083(v=vs.95).aspx

  1. 打开项目的属性并导航到Silverlight选项卡.
  2. 选中"启用从浏览器运行应用程序"选项.
  3. 单击"浏览器外设置"按钮.将弹出一个新对话框.
  4. 选中"在浏览器外部运行时需要提升信任"选项.

当用户安装Silverlight应用程序时,他们将获得安全警告,然后才能继续.这只发生过一次.以这种方式运行应用程序时,ClipBoard.SetText()调用将不再触发安全对话框.