0

バックグラウンドで画像をアップロードするために NSOperationQueue を使用しています。画像がアップロードされると、データを保存するために使用している URL とこの画像 URL が返されます。このコードを使用していますが、最初の操作の実行から URL が取得されるまで待機していません。

PostScrapPicture メソッドが実行されない限り、および実行されるまで postScrap が実行されないようにしたいのですが、OperationQueue.WaitUntilAllOperationsAreFinished(); を使用しています。このためですが、実行されていません。

最初の操作:

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

2 番目の操作:

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) には、C# 5.0 の非同期/待機のサポートを含む、.Net の強力なタスク インフラストラクチャのサポートが組み込まれています。個人的には、このようなもののために NSOperationQueue を気にしません。以下にサンプルを含めました。これにより、アップロードに文字列 url で応答する Web サービスが呼び出されます。

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 に答える