[英]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.