2013-09-24 69 views
0

我使用NSOperationQueue在後臺上傳圖片,並在圖片上傳時返回url和我們用於保存數據的這個圖片url。我使用這段代碼,但它並沒有等到Url從第一次操作中獲得執行。單點觸摸的NSO​​perationQueue實現

我希望postScrap不會執行,除非和直到PostScrapPicture方法不會執行 執行,我使用OperationQueue.WaitUntilAllOperationsAreFinished();爲此,但它沒有執行。

第一操作:

Action asyncUploadAction =() => {     
    OperationQueue.AddOperation(()=>{ 
    PostScrapPicture (ownerUserId,scrapImage,serviceSuccessAction, serviceErrorAction);});       
} ;  

第二操作:

if (OperationQueue!=null) { 
    OperationQueue.WaitUntilAllOperationsAreFinished(); 

    if (!String.IsNullOrEmpty (scrapbook.Picture.Url)) 
     PostScrap (scrapbook, serviceSuccessCallback, erviceErrorCallback); 
    else 
     errorAction (true);            
} 
+0

在Xamarin.iOS中進行後臺處理的推薦方式是使用C#5的異步/等待功能。 –

回答

2

Xamarin.IOS(MonoTouch的)包括內置的支持的.Net強大任務基礎設施,包括C#5.0異步/等待支持。就我個人而言,我不會爲NSOperationQueue這樣的東西而煩惱。我在下面包含了一個示例。這調用了一個web服務,它用一個字符串url來響應上傳。

public async Task<string> UploadImageData(byte[] imageData) 
{ 
    var clientHandler = new HttpClientHandler(); 

    using (var client = new HttpClient(clientHandler)) 
    { 
    var content = new ByteArrayContent(imageData); 
    var response = await client.PostAsync(new Uri("http://example.com/postImage"), content); 
    return await response.Content.ReadAsStringAsync(); 
    } 
} 
+0

我得到了解決方案,這是我使用Async Rest服務調用的bcoz,因此它使用的是NsOperationQueue,並且當我們使用異步調用時它使得操作計數爲零。所以我必須使它同步,以便它將不會使操作數爲零,並且會等待。 –