我正在使用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);
}
答案 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();
}
}