繁体   English   中英

Silverlight文件处理线程

[英]Silverlight file processing threading

我有一个在浏览器中运行的SL应用程序。 用户按下一个按钮,将显示一个OpenFiledDialog 用户选择文件后,我要对其进行一些处理。 但是,我也想显示一个进度条,并使用户能够取消该操作。

我的代码:

var dialog = new OpenFileDoalog { Filter = ... };

if(dialog.ShowDialog() != true)
    return;

// Show the Progress bar
MyProgressBar.Visibility = System.Windows.Visibility.Visible;

// Do the processing on another thread
new Thread(() =>
{   
    var stream = dialog.File.OpenRead();
    var data = Process(stream);
    Dispatcher.BeginInvoke(() => IGotSomeDataForYou(data));
}).Start();

但是,我在FileInfo.OpenRead()上收到InvalidOperationException ,因为This operation can only occur on the UI Thread.

但是,如果我在UI线程上进行工作,则只要处理完成,UI就会冻结。 而且我无法在UI线程上打开流,然后在后台线程上对其进行处理,因为这会导致跨线程使用错误。

我认为这是一个普遍的问题,但是我没有找到解决方案。 在这种情况下,我有什么选择? 首先将其读取到内存中的字节数组,然后证明这一点? 还要别的吗?

谢谢!

不要调用dialog.File.OpenRead(); 在单独的线程中。 在UI线程上调用它们,它们获取从opendialog返回的文件,并将其设置为私有属性,然后在后台线程上对其进行处理,例如上传。

OpenFileDialog在SL中有一些限制。 查看我的问题以获取更多详细信息。 对话框必须由用户启动。 银光

问候。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM