0

次のコードを使用していますが、うまく機能します

private void somethingButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
WebClient webClient = new WebClient();
webClient.OpenReadCompleted += webClient_OpenReadCompleted;
webClient.OpenReadAsync(new Uri(myUri));
}

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if(e.Error != null)
{
messageTextBlock.Text = e.Error.Message;
return;
}
using (Stream s=e.Result)
            {
                XDocument document = XDocument.Load(s);

                var q1 = from c in document.Descendants("result")
                        select new IndeedResult
                                {
                                    Title =((string)c.Element("title")).Trim(),
                                    ResultUri = ((string)c.Element("url")).Trim(),
                                    Date = ((string)c.Element("date")).Trim(),
                                };
myDataGrid.ItemsSource = q1;
}

WebClientしかし、別のを追加したいと思いwebClient2ます。これはまったく同じことを行いますが、uri と構造が異なるため、webClient2_OpenReadCompleted...

問題は、最終的にマージする必要があることです (または、マージする前にいくつかのロジックを実行する必要がありvar q1ますwebClient_OpenReadCompleted) 。var q2webClient2_OpenReadCompleted

var mergedQs = q1.Union(q2).ToList();
myDataGrid.ItemsSource = mergedQs

それを行う簡単な方法はありますか?これらのイベント ハンドラーを使用してそれを行う方法がわかりません。

4

1 に答える 1

1

良い質問!こんな感じでしたか

    void webClient_OpenReadCompleted( object sender, OpenReadCompletedEventArgs e )
    {
        Stream stream = (Stream)e.Result;
        BinaryReader reader = new BinaryReader( stream );

        byte[] buffer = reader.ReadBytes( (int)stream.Length );
        Uri uri = (Uri)e.UserState;

        streams.Add( uri.AbsoluteUri, new MemoryStream( buffer ) );
    }

ストリーム ディクショナリに一意のキーを提供するために UserState を使用することに注意してください。完璧に動作します :-) このようにして、好きなだけ多くのファイル / 画像 / バイナリ データを操作できます。

これがどれほど強力かを確認するには、これを参照してください....http://www.alansimes.com/warp3dsilverlighttestpage.html

于 2012-09-09T17:15:24.570 に答える