1

Windows Phone 開発は初めてです。

リスト内の各要素に対して for ループを使用して webservice を呼び出しています。サービスからの結果が得られた後にのみ、次のループに行きたいです。私のループは次のようなものです:

for (int i = 0; i < count; i++)
        {
            selectedInfo = lstReorderItems[i];
            if (string.IsNullOrEmpty(selectedInfo.ItemCostVariantValueIDs))
            {
                client.AddItemstoCartCompleted += client_AddItemstoCartCompleted;
                client.AddItemstoCartAsync(//params);
            }
            else
            {
                client.CheckItemQuantityInCartCompleted += client_CheckItemQuantityInCartCompleted;
                client.CheckItemQuantityInCartAsync(//params);
            }
        }

しかし、結果が来るのを待たずにループが続きます。誰でも私を助けることができますか?

4

1 に答える 1

0

質問を読んだ後、私が理解したのは、一連の Web サービス呼び出しを行っているということです。私の意見では、最終結果を取得するには、すべてのサービス呼び出しが終了し、途中で失敗応答を取得する可能性があるまで待つ必要があるため、これは良くありません。これにより、最終結果もブロックされます。そのため、WebClient がバックグラウンド オプションで設計されていることをサポートするために、並列呼び出しを行います。

完全に必要な場合は、ループ変数をクラス メンバーとして宣言します。

Public class xxxxxx
{
  int i = (startCount ) 0;

その後、通常どおりサービスを開始し、

 selectedInfo = lstReorderItems[i];
 if (string.IsNullOrEmpty(selectedInfo.ItemCostVariantValueIDs))
  {
        client.AddItemstoCartCompleted += client_AddItemstoCartCompleted;
        client.AddItemstoCartAsync(//params);
  }

サービス応答完了イベントで、あなたの場合 client_AddItemstoCartCompleted は、ループ変数をインクリメントした後に同じサービスを呼び出します。その前に、ループ変数とカウントを比較する必要があります

if(i< count)
{
 i++;
 selectedInfo = lstReorderItems[i];
 if (string.IsNullOrEmpty(selectedInfo.ItemCostVariantValueIDs))
   {
      client.AddItemstoCartAsync(//params);
   }
}
于 2013-05-30T06:18:08.147 に答える