我有一個在瀏覽器中運行的SL應用程序。用戶按下按鈕並顯示OpenFiledDialog
。當用戶選擇一個文件時,我想對它做一些處理。但是,我也想顯示一個進度條並使用戶能夠操作。Silverlight文件處理線程
我的代碼:
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()
因爲This operation can only occur on the UI Thread.
得到InvalidOperationException
。
但是,如果我在UI線程上工作,只要處理完成,UI就會凍結。我無法在UI線程上打開流,然後在後臺線程上處理它,因爲這會給跨線程的使用帶來錯誤。
我認爲這是一個常見問題,但我找不到解決方案。在這種情況下我有什麼選擇?先將它讀到內存中的字節數組然後證明它?還要別的嗎?
謝謝!
所以你說我應該讀取整個文件到一個私人'字節[]'領域,然後做處理? (這是一個excel文件) – jornb87 2012-04-23 11:18:01
是的,你應該得到的字節發送線程作爲參數,或者如果你可以你必須調用openread使用Dispatcher.BeginInvoke()使用UI線程來調用openread。 – 2012-04-24 04:55:09