0

我正在使用 NSOperationQueue 在后台上传图像,当图像上传时它返回 url 和我们用于保存数据的图像 url。我正在使用这段代码,但它不会等到 Url 从第一次操作执行中获取。

我希望 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);                                             
}  
4

1 回答 1

2

Xamarin.IOS (Monotouch) 包括对 .Net 功能强大的任务基础结构的内置支持,包括 C# 5.0 async/await 支持。就我个人而言,我不会为这样的事情烦恼 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();
  }
}
于 2013-09-24T10:40:37.737 回答