0

こんにちは友人私は次のような 1 つのコードを持っています:

for (int i = 1; i < 6; i++)
{
    int j = 0;
    Nos[j++] = Config[i];

    var xmladd = "uri to download data";
    WebClient _proxy2 = new WebClient();
    _proxy2.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCompleted);
    _proxy2.DownloadStringAsync(new Uri(xmladd));

    string msg = Config[11] + ":" + Config[12] + " .My Current Location is " + Properties.address + " , Latitude : " + clslatlong.ReturnLat() + " , Longitude : " + clslatlong.ReturnLongi(); 
}

ここでの問題は、完了したイベントがすぐに発生せず、さらにコードを実行し続けることですが、次のコードは完了したイベントによって返された結果に基づいています。私のコードは、完了したイベントからの応答を待ってから、さらに進んでください。

4

3 に答える 3

2

結果に依存する場合は、リクエスト完了ハンドラーでコードの実行を続行する必要があります。これが、イベント ドリブンまたは非同期コーディングのしくみです。

于 2013-01-04T16:52:45.587 に答える
1

非同期プログラミングは面倒になる可能性があります。それを行う正しい方法は、Johan Paul の回答によるものです。関数を分割し、その一部をイベント ハンドラーに配置します。ループ内で非同期操作を実行しているため、コードは非常に厄介になります。

あなたの質問には WP7 タグと WP7.1 タグの両方があります。WP7.1 をサポートするだけで済む場合は、Microsoft.Bcl.Asyncライブラリ (現在はベータ版) のオプションがあります。これにより、WP7.1 でasync/が有効になり、はるかに簡単になります。await

for (int i = 1; i < 6; i++)
{
  int j = 0;
  Nos[j++] = Config[i];

  var xmladd = "uri to download data";
  WebClient _proxy2 = new WebClient();
  var result = await _proxy2.DownloadStringTaskAsync(xmladd);

  ...
}
于 2013-01-04T19:14:43.143 に答える
0

このような機能には、非同期CTPライブラリを使用できます。

ダウンロード: http ://www.microsoft.com/en-us/download/details.aspx?displaylang = en&id = 9983

例: http: //10rem.net/blog/2012/05/22/using-async-and-await-in-silverlight-5-and-net-4-in-visual-studio-11-with-the- async-targeting-pack

于 2013-01-04T17:54:57.487 に答える