我有一个在浏览器中运行的 SL 应用程序。用户按下按钮并OpenFiledDialog
显示a。当用户选择了一个文件后,我想对其进行一些处理。但是,我还想显示一个进度条并允许用户取消操作。
我的代码:
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();
但是,我得到了一个InvalidOperationException
,FileInfo.OpenRead()
因为This operation can only occur on the UI Thread.
.
但是,如果我在 UI 线程上进行工作,只要处理完成,UI 就会冻结。而且我无法在 UI 线程上打开流,然后在后台线程上处理它,因为这会导致跨线程使用错误。
我认为这是一个常见问题,但我没有找到解决方案。在这种情况下我有什么选择?先将其读入内存字节数组,然后再证明?还要别的吗?
谢谢!