低性能计算机上的浏览器错误

时间:2011-10-03 19:57:25

标签: silverlight plugins browser

ai制作一个Silverlight图像上传器,代码运行正常,但在低性能机器上,浏览器(Firefox,Chrome)会出现如下错误:插件'silverlight'没有响应!!,调整大小的方法有一个cpu成本和原因问题。

我现在需要思考:

  • 有一种方法可以在浏览器上设置“Check Plugin TimeOut”吗?
  • 有一种方法可以使用OpenFileDialog assync加载文件吗?

    private void btnSelectFiles_Click(object sender, RoutedEventArgs e)
    {
    
        files = new List<File>();
    
        OpenFileDialog dlg = new OpenFileDialog();
        dlg.Multiselect = Parameters.multiselect;
        dlg.Filter = Parameters.filter;
    
        if (dlg.ShowDialog() == true)
        {
            JavaScriptHelper.Invoke("SilverUploaderDebug", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - Abrindo arquivos");
    
            foreach (var file in dlg.Files)
            {
                try
                {
    
                    var f = new File();
                    JavaScriptHelper.Invoke("SilverUploaderDebug", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - Abrindo " + file.Name);
    
                    JavaScriptHelper.Invoke("SilverUploaderDebug", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - Redimensionando " + file.Name + "(grande)");
                    var stream1 = file.OpenRead();
                    f.data1 = ImageHelper.Resize(stream1, Parameters.img_width, Parameters.img_height, 90, f);
                    JavaScriptHelper.Invoke("SilverUploaderDebug", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - OK");
    
                    JavaScriptHelper.Invoke("SilverUploaderDebug", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - Redimensionando " + file.Name + "(pequeno)");
                    var stream2 = file.OpenRead();
                    f.data2 = ImageHelper.Resize(stream2, Parameters.img_thumb_width, Parameters.img_thumb_height, 90, f);
                    JavaScriptHelper.Invoke("SilverUploaderDebug", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + " - OK");                        
    
                    f.name = file.Name;
                    f.extension = file.Extension;
                    files.Add(f);
                    JavaScriptHelper.Invoke("SilverUploaderFileLoaded",JsonHelper.SerializeToJsonString(f));
                }
                catch(Exception ex)
                {
                    JavaScriptHelper.Invoke("SilverUploaderException", ex.Message);
                }
            }
    
            if (Parameters.auto_upload)
                upload();
        }
    }
    

1 个答案:

答案 0 :(得分:0)

Silverlight插件“无响应”的原因是您在UI线程上运行长时间运行的操作。为什么不将图像文件(file.OpenRead())的实际读取和操作移动到BackgroundWorker?我不知道你的upload方法做了什么,希望它是好的和异步的,但你可能想要考虑这是否也是非常重要的时间。

如果您想改善用户体验,可以尝试在后台线程突然显示的同时在UI上添加“正在进行中的工作”指示。