2014-03-04 118 views
-3

我過去曾經使用過Windows Phone 7應用程序System.Threading.Tasks.3.0.1 library,但它們似乎沒有可用於Windows 8的新更新,所以我不確定它現在是內置的還是內置的。在Windows Phone 8中並行?

這是我用圖書館

 Parallel.Invoke(() => Dispose()); 


public void Dispose() 
    { 
     if (photoCamera != null) 
     { 
      photoCamera.Dispose(); 
      photoCamera.Initialized -= PhotoCameraOnInitialized; 
      photoCamera.AutoFocusCompleted -= PhotoCameraOnAutoFocusCompleted; 
      photoCamera = null; 


      recScanArea.Visibility = Visibility.Collapsed; 

     } 
    } 
+0

什麼的平行調用Dispose點()? – Aybe

+0

因爲在我的應用程序中,我有一個全景視圖,沒有一個帶有條形碼掃描儀視圖,另一個沒有它,如果您想在2之間切換並嘗試關閉條形碼掃描儀,那麼會出現滯後現象並導致不好的體驗,通過使用並行我能夠切換到另一個視圖,然後讓它並行關閉條碼掃描器代碼。 – chobo2

+1

爲什麼不在''使用'內部包裹你的呼叫,以便儘早處置,或者你不能? – Aybe

回答

0

最好的等待是使用async/await,它提供了在.NET Framework 4.5中實現任務的最佳方法。因此,我向你推薦this link

0

如果你只是想在後臺線程上運行一些代碼,那麼並行處理是過度的。移動設備等「小型」目標不支持(也不應該)支持完整的並行處理。

首先,我嫌疑人您的初始代碼沒有做任何不同於如果您剛剛直接調用Dispose。並行調用將包括調用線程作爲其「工作人員」之一;它確實不是釋放調用線程來做其他工作。此外,設置Visibility和訪問PhotoCamera幾乎肯定需要在UI線程上完成。所以,我敢打賭,你的「並行」代碼事實上並不平行。我想試試這個第一:

Dispose(); 

如果你是絕對肯定的是,要在後臺線程執行Dispose,您可以使用Task.Run

await Task.Run(() => Dispose());