NoshperationQueue实现monotouch

时间:2013-09-24 10:27:11

标签: c# xamarin.ios

我正在使用NSOperationQueue在后台上传图片,当图片上传时,它返回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);                                             
}  

1 个答案:

答案 0 :(得分:2)

Xamarin.IOS(Monotouch)包含对.Net强大的Task基础结构的内置支持,包括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();
  }
}