zoukankan      html  css  js  c++  java
  • 吐槽一下Silverlight的SaveFileDialog.

    Silverlight为了安全是不允许你直接在非人为触发的环境下使用SaveFileDialog等对话框类.  必须在用户鼠标或者键盘事件的调用代码中才能够调用它的ShowDialog方法. 如果违反了就会出现"System.Security.SecurityException: 对话框必须由用户启动。"异常了.

    这个条件其实是不充分的, 其实即便是是鼠标点击仍然还会出现这样的错误. 看一下这段代码

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
    	Thread.Sleep(1000);
    	var saveDlg = new SaveFileDialog();
    	saveDlg.Filter = "JPEG Files (*.jpeg)|*.jpeg";
    	saveDlg.DefaultExt = ".jpeg";
    	try
    	{
    		if ((bool)saveDlg.ShowDialog())
    		{
    		
    		}
    	}
    	catch (Exception exception)
    	{
    		MessageBox.Show(exception.ToString());
    	}
    }
    

     这段代码时会恒定出错的, 移除Thread.Sleep(1000);是没有问题的.  这里说明了, 这个权限是有时限的, 如果从用户触发到调用ShowDialog不在1秒内那么就会报SecurityException.

    这个不能算是个bug, 因为的确没有很好的方法来检查是用户触发的代码调用还是程序员自己写的代码调用.

  • 相关阅读:
    实现类似add(1)(2)(3)的函数
    Chrome安装助手踩坑
    升级webpack4错误处理
    vue项目埋点
    如何理解vue中的v-bind?
    不能不知道的webpack基本配置
    IE9及以下浏览器升级提示
    HTML5常用API
    css中clip属性
    Web开发展望
  • 原文地址:https://www.cnblogs.com/cuiweifu/p/Silverlight_SecurityException.html
Copyright © 2011-2022 走看看